Ответ: The Maze
Ща скачаю. Ну под TRUE 3D я подразумеваю любое 3D, где реально происходит наклон картинок в перспективе. А псевдо 3D - это как в The Maze, там все наклоны отрисованы в отдельные картинки и сохранены. =)
- - - Через минуту: EXEшник показывает чёрный экран, а паскаль я не знаю и компилятора нет :@ |
Ответ: The Maze
тру 3д это на улице, у телефона экран 2д
|
Ответ: The Maze
DOS-программы ведут себя не предсказуемо в windows линейки NT, бывает перестановишь, и вообще в полноэкранном режиме отказываются работать, хотя до этого все было OK, бывает на 2-й раз запускается... а вообще скачай эмулятор DosBox, или загрузись с дискеты и запускай...
|
Ответ: The Maze
jimon, блин, ну неужели не понятно, что я имею ввиду?
|
Ответ: The Maze
Вложений: 1
Я наконец смог придумать функцию, которая наклоняет картинку в пространстве. Правда, еще не оптимизировал.
|
Ответ: The Maze
О_о Я даже не представляю, как это сделать... Хотя...Сначала сжать по горизонтали, пересчитать все пиксели в каждой строке на основании новой ширины рисунка, потому пересчитывать каждый столбик отдельно, в зависимости от его высоты (высота в данном случае будет разная у всех столбиков). Типа так. А ещё можно даже не пересчитывая. Просто выбрасывать лишние пикселы, ну а если растягивать картинку, то просто заменять новые пикселы такого же цвета, как и соседние. Во блин. А до этого момента даже в голову не приходило как это работает =)
|
Ответ: The Maze
Phantom_wc
по ищи формулы основ 3д графики - перевод 3д координаты в 2д кооридануту на екране, сможешь сделать банальное проволочное 3д (крутить 3д кубик из линий на екране) так же сможешь найти как рендерить полигон с текстурой |
Ответ: The Maze
jimon, так дело-то в том, что я к этому и не стремлюсь. Я не занимаюсь игроделаньем. И мысль была сделать именно так, как сделан этот проект в первом посте, потому что не требуется высокая производительность. А вот пример Романзеса с вращающейся в перспективе картиннкой на моём сименсе воспроизводится с трудом. Да и пока некогда и этим заниматься. =(
|
Ответ: The Maze
Неплохая идея сделать игру на основе voxel'ого движка (кто не знает - отрисовка карты из двухмерного массива, в котором элементы - это высота точки на карте, столбцы либо разукрашиваются в зависимсти от высоты. Либо на рельеф накладывается рисунок как в предложенном примере.
home page: http://delphi6games.narod.ru/prim.htm download_url: http://delphi6games.narod.ru/prim/voxel.rar Для нормальной компиляции в Delphi локальную переменную rotate:integer=0; перенесите в область глобальных переменных примерно так: _____________ Var {Cosine and Sine tables} CosT, SinT : Array [0..2047] of Integer; {Distance compensation table} DComp : Array [1..Depth + 1] of Integer; iMap:array[0..$FFFF] of byte; hMap:array[0..$FFFF] of byte; rotate:integer=0; _________________ |
Ответ: The Maze
Вложений: 1
Сегодня на работе занимался дуракавалянием, под руку попался на кануне скачанный picture3D.zip от Romanzes.
Переделал под MIDletPascal без дополнительных java-библиотек. интересно, что хотя я добавил много дополнительного кода, но jar-файл получился на 10% меньше чем предоставленная java-версия. Работает медленнее раза в 3 чем java-аналог, впрочем для MIDletPascal это нормально. __________ Идеи (от arT) реализованные в данной программе: 1. Загрузка 256-цветных bmp файлов в байтовый массив и работа с ним 2. Загрузка чисел из текстовой строки, числа разделяются любым кол-вом символов, которые не в диапазоне '0'..'9' (т.е. не являются числом) _ Примечание: команды сохраниения константных массивов равносильны одиночным присваиваниям и каждая занимает в памяти около 7 байт, поэтому лучше загружать данные из ресурсов или конвертировать из строки. ____ p.s. полностью 3D-алгоритм реализовать в MIDletPascal вредно, для этого подходит только java, притом с хорошей оптимизацией методов/идей и алгоритма.. |
Ответ: The Maze
Я как раз думал о том, что очень хорошо бы было пользоваться 256-цветной палитрой. Вот в чем прикол: я в java-программе для отрисовки картинки пользуюсь функциями getRGB и drawRGB, которые юзают массив чисел int. Каждое число занимает 4 байта. В картинке >6000 пикселей. Получается, что этот массив в памяти занимает больше 24 Кб. Кроме того, программа наверняка будет работать гораздо быстрее с числами byte, нежели чем с int. Я даже декомпилировал стандартные классы j2me, чтобы посмотреть реализацию этих функций, и написать свои :) , но там написано вот что:
public native void drawRGB(int ai[], int i, int j, int k, int l, int i1, int j1, boolean flag); Если кто знает, как реализовать загрузку и отрисовку массива пикселей в формате byte, пишите. Прога на Midlet Pascal работает медленнее скорее всего потому, что для отрисовки используется процедура plot, которая в МП реализована через рисование квадрата размером в 1 писксель :-D. |
Ответ: The Maze
Вложений: 1
Romanzes - основа 3D - это 3-x-трехугольная грань, потому что проще расчитывается, все изображения строятся на ее основе.
Быстрее чем getRGB и drawRGB врятли получиться. Integer - родной тип java-машины, с другими даже меньшими типами она дольше работает. Тип byte служит только для того чтоб занимать в памяти меньше места. Поэтому прийдется пожертвовать объемом памяти в пользу производительности. ___ plot - это обертка, писал для наглядности, а вообще оптимальнее писать так: fillRect(x,y,1,1); немножко оптимизировть это сократить кол-во циклов, поэтому можно напрямую выводить на экран, а не во временный массив ___ об оптимизации функцию sin, лучше переписать так: function sin(angle:integer):integer; begin sin:=0; angle:=angle mod 360; if (angle<0) then angle:=360+angle; if (angle<=90) then sin:=sintab[angle] else if (angle<=180) then sin:=sintab[180-angle] else if (angle<=270) then sin:=-sintab[angle-180] else sin:=-sintab[360-angle]; end; ___ и еще везде где возможно расчитывайте заранее все выражения, которые не изменяются в цикле, а еще старайтесь чтобы смещение в массивах было инкрементным, а не с помощью вычислений.. ___ p.s. Выкладываю свою версию проволочного 3D-куба. |
Ответ: The Maze
Вложений: 1
Заинтересовала идея воксельного движка. Вот мои наработки: Лунный звездолет в MIDletPacal. Реализовано без внешних java-библиотек.
Но программа все-таки работает медленно, оптимизации требует переработка вывода графики с поточечного режима на getRGB и drawRGB. Если добавлять логику, что еще приведет к снижению производительности, то необходимо уменьшить размеры экрана вывода, чтобы меньше точек пересчитывалось. ___ p.s. у кого какие идеи, можно сделать стрелялку или что-нить подобное только нужны дизайнеры и интересные задумки |
Ответ: The Maze
Sorry I don't speak much Russian.
Nice work on the voxel engine and the 3D cube. The best approach would be to use a raycaster, like the one used in Duke Nukem 3D, this build engine worked on processors as slow as a 66MHz, 486. The only problem is there isn't enough RAM for many textures, and scaling them on the phone would also be a problem. |
Ответ: The Maze
Вложений: 1
FISHY -
The problem even not in memory, as in speed of the machine, which differs in realizations. The usual telephone is worse than computer 486 (66MHz). _____ Немного оптимизировал voxel (new version), картинка более четкая, теперь если оптимизировать дальше, то необходимо умножение/деление заменить побитовыми сдвигами (shr shl). изменение отображения карты настраивается в строке: y1:=((255-(c-h)*8) div depth)+60; если нужно что бы камера реагировала на текущую высоту раскомментируйте строку: h:=(map[(y div 1024) and 255, (x div 1024) and 255]); и переправьте строку if y2<=40 then break; в if y2<=0 then break; если будет использоваться drawRGB, то раскомментируйте строку if y2>0 then verticalline(i,0,y2,0); и добавьте дорисовку текущего столбца цветом заднего фона (т.е. очистку). |
Часовой пояс GMT +4, время: 07:49. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot