|
13.11.2008, 01:00
|
#16
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: The Maze
Ща скачаю. Ну под TRUE 3D я подразумеваю любое 3D, где реально происходит наклон картинок в перспективе. А псевдо 3D - это как в The Maze, там все наклоны отрисованы в отдельные картинки и сохранены. =)
- - -
Через минуту:
EXEшник показывает чёрный экран, а паскаль я не знаю и компилятора нет
|
(Offline)
|
|
13.11.2008, 01:16
|
#17
|
|
Ответ: The Maze
тру 3д это на улице, у телефона экран 2д
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
13.11.2008, 01:30
|
#18
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: The Maze
DOS-программы ведут себя не предсказуемо в windows линейки NT, бывает перестановишь, и вообще в полноэкранном режиме отказываются работать, хотя до этого все было OK, бывает на 2-й раз запускается... а вообще скачай эмулятор DosBox, или загрузись с дискеты и запускай...
|
(Offline)
|
|
13.11.2008, 14:30
|
#19
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: The Maze
jimon, блин, ну неужели не понятно, что я имею ввиду?
|
(Offline)
|
|
16.11.2008, 20:49
|
#20
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: The Maze
Я наконец смог придумать функцию, которая наклоняет картинку в пространстве. Правда, еще не оптимизировал.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Romanzes за это полезное сообщение:
|
|
17.11.2008, 04:43
|
#21
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: The Maze
О_о Я даже не представляю, как это сделать... Хотя...Сначала сжать по горизонтали, пересчитать все пиксели в каждой строке на основании новой ширины рисунка, потому пересчитывать каждый столбик отдельно, в зависимости от его высоты (высота в данном случае будет разная у всех столбиков). Типа так. А ещё можно даже не пересчитывая. Просто выбрасывать лишние пикселы, ну а если растягивать картинку, то просто заменять новые пикселы такого же цвета, как и соседние. Во блин. А до этого момента даже в голову не приходило как это работает =)
|
(Offline)
|
|
17.11.2008, 10:58
|
#22
|
|
Ответ: The Maze
Phantom_wc
по ищи формулы основ 3д графики - перевод 3д координаты в 2д кооридануту на екране, сможешь сделать банальное проволочное 3д (крутить 3д кубик из линий на екране)
так же сможешь найти как рендерить полигон с текстурой
|
|
|
17.11.2008, 15:35
|
#23
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: The Maze
jimon, так дело-то в том, что я к этому и не стремлюсь. Я не занимаюсь игроделаньем. И мысль была сделать именно так, как сделан этот проект в первом посте, потому что не требуется высокая производительность. А вот пример Романзеса с вращающейся в перспективе картиннкой на моём сименсе воспроизводится с трудом. Да и пока некогда и этим заниматься. =(
|
(Offline)
|
|
18.11.2008, 21:00
|
#24
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: 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;
_________________
|
(Offline)
|
|
21.11.2008, 22:06
|
#25
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: The Maze
Сегодня на работе занимался дуракавалянием, под руку попался на кануне скачанный picture3D.zip от Romanzes.
Переделал под MIDletPascal без дополнительных java-библиотек.
интересно, что хотя я добавил много дополнительного кода, но jar-файл получился на 10% меньше чем предоставленная java-версия.
Работает медленнее раза в 3 чем java-аналог, впрочем для MIDletPascal это нормально.
__________
Идеи (от arT) реализованные в данной программе:
1. Загрузка 256-цветных bmp файлов в байтовый массив и работа с ним
2. Загрузка чисел из текстовой строки, числа разделяются любым кол-вом символов, которые не в диапазоне '0'..'9' (т.е. не являются числом)
_ Примечание: команды сохраниения константных массивов равносильны одиночным присваиваниям и каждая занимает в памяти около 7 байт, поэтому лучше загружать данные из ресурсов или конвертировать из строки.
____
p.s. полностью 3D-алгоритм реализовать в MIDletPascal вредно, для этого подходит только java, притом с хорошей оптимизацией методов/идей и алгоритма..
Последний раз редактировалось abcdef, 21.11.2008 в 22:13.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо abcdef за это полезное сообщение:
|
|
22.11.2008, 13:00
|
#26
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: 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 писксель .
|
(Offline)
|
|
22.11.2008, 21:59
|
#27
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: The Maze
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-куба.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.11.2008, 21:52
|
#28
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: The Maze
Заинтересовала идея воксельного движка. Вот мои наработки: Лунный звездолет в MIDletPacal. Реализовано без внешних java-библиотек.
Но программа все-таки работает медленно, оптимизации требует переработка вывода графики с поточечного режима на getRGB и drawRGB.
Если добавлять логику, что еще приведет к снижению производительности, то необходимо уменьшить размеры экрана вывода, чтобы меньше точек пересчитывалось.
___
p.s. у кого какие идеи, можно сделать стрелялку или что-нить подобное только нужны дизайнеры и интересные задумки
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо abcdef за это полезное сообщение:
|
|
26.11.2008, 02:10
|
#29
|
AnyKey`щик
Регистрация: 27.04.2008
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: 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.
|
(Offline)
|
|
26.11.2008, 21:58
|
#30
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: The Maze
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)* 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); и добавьте дорисовку текущего столбца цветом заднего фона (т.е. очистку).
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:48.
|