![]() |
Ответ: создание 3Д движка на j2me
Не пойму зачем в short конвертировать? Пусть бы int возращало. Хотя так памяти меньше берёт.
Кстати, ты тоже 3д движок делаеш? Можеш объяснить почему некоторые движки медленные, а некоторые быстрые? Вроде все алгоритмы не засекречены и каждый может использовать лучший алгоритм, но нет, некоторые игры летают, а некоторые несмотря на свою простоту тормазят. |
Ответ: создание 3Д движка на j2me
Можеш формулу написать как перемножать матрици 4*4. А то у меня какая-то фигня получается.
|
Ответ: создание 3Д движка на j2me
Вложений: 1
матрицЫ 4х4 перемножаются так:
|
Ответ: создание 3Д движка на j2me
Вложений: 1
Вот так выглядит цикл умножения:
|
Ответ: создание 3Д движка на j2me
Я не пойму. Есть у меня матрица matrix и matrixTemp. matrix я задаю z-позицию = 600. А matrixTemp задаю Х угол 5. Потом matrix умножаю на matrixTemp и matrix поворачивается, НО почему-то позиция становится = 0. По-моему этого не должно быть. Или должно?
|
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
Код:
public static Matrix4x4 operator *(Matrix4x4 left, Matrix4x4 right) На сколько мне известно, разработчики Java сочли не нужной перегрузку операторов. Такчто придётся тебе попарится с переводом :( |
Ответ: создание 3Д движка на j2me
Вот http://upwap.ru/455066 сделал свет и матрицу. Но в матрице, в методе mul навернае какая-то ошибка т.к. модель постеменно сжимается. Можете проверить мою матрицу.
|
Ответ: создание 3Д движка на j2me
>Вот http://upwap.ru/455066
Где jar? >( А что это у тебя за арифметика странная?? Почему везде int?? |
Ответ: создание 3Д движка на j2me
jar в папке dist. Арифметика не странная, а с фиксированной точкой. Операции с float в раз 5 медленее.
И изменяется длинна вектора из-за моего фиксед поинт :-( . А float использовать - фпс сильно понизится. В матрице маскота тоже везде fixed point, и в матрице. И длинна векторов там почти не меняется. Как вориант можно нормализировать длинну векторов, но это долго из-за корня. И это не выход т.к. нельзя будет масштабировать вектор. А в маскоте я вручную(умноженйем и делением) менял длинну вектора и она потом такой и оставалась т.е. не нормализировалась. |
Ответ: создание 3Д движка на j2me
Я уже и float сделал, но всё равно модель постепенно сжимается. Может у меня не правельно умножаются матрицы?
|
Ответ: создание 3Д движка на j2me
Нашол ошибку. Не надо было изменения сразу же записывать.
Но теперь не пойму почему при умножении на матрицу переноса моя матрица не переносится. Вот http://upwap.ru/455417 посмотрите почему не работает матрица переноса. |
Ответ: создание 3Д движка на j2me
Цитата:
ЗЫ: setIdentity не дописана. |
Ответ: создание 3Д движка на j2me
1. Какой код? Код умножения матриц в классе матрици - метод mul.
2. Почему setIndetity не дописана? 3. Меня больше тревожит почему матрица при умножении на матрицу поворота теряет свои позиции. В маскоте такого не было. И при умножении на матрицу переноса - матрица нормально переносилась. А у меня с этим проблемы. |
Ответ: создание 3Д движка на j2me
>2. Почему setIndetity не дописана?
4я строка матрицы не заполняется. Возможно, от этого и проблемы с позиционированием. |
Ответ: создание 3Д движка на j2me
4я строчка и не изменяется.
Там ошибка была в том, что я изменял не те переменные (надо было изменять t03,t13,t23) и надо было вызывать метод toFP. Вот http://upwap.ru/455867 по-исправлял эти ошибки. Там еще можно сделать, что-то быстрее или лучше? |
Ответ: создание 3Д движка на j2me
Вложений: 2
вот выкладую в форум, а то upwap файлы не долго хранит.
Добавил управление светом и немного улучшил конвертер. |
Ответ: создание 3Д движка на j2me
Не знаете, что надо сделать с проектом javaSE, чтобы в манифест главный класс записывался?
|
Ответ: создание 3Д движка на j2me
Кажись у тебя немного неправильно рассчитана матрица проэкции.
Тут это хорошо видно: ![]() ![]() |
Ответ: создание 3Д движка на j2me
Модель такая. На маскоте она тоже так себя ведёт http://upwap.ru/456527 чем ближе модель тем больше глаза закрывают уши.
|
Ответ: создание 3Д движка на j2me
И всё-же при повороте это выглядит кривовато <_<
|
Ответ: создание 3Д движка на j2me
Ну не знаю. Подскажи, что там не правельно расчитывается. Длинна векторов там одинаковая. Смотрят они все в свои стороны. Что еще может быть?
|
Ответ: создание 3Д движка на j2me
Вложений: 2
Cделал новую версию. Изменил формат файла и теперь он меньше весит и легче грузится. Некоторые int заменил на short. Упростил вычисление света. Добавил метод масштабирования матрици, хотя при изменении длинны нормали свет перестаёт работать. Вроде всё.
Не подскажите, что там еще можно улучшить? |
Ответ: создание 3Д движка на j2me
Вложений: 2
Поменял интерфейс на супер класс и фпс вырас на 7 ! :super:
|
Ответ: создание 3Д движка на j2me
Кто нибудь знает как сделать, если один полигон перекрывает часть другова, то как не рисовать перекрытую часть второго полигона?
|
Ответ: создание 3Д движка на j2me
Не знает алгоритм "быстрая сортировка" это самый быстрый алгоритм или есть лучше?
|
Ответ: создание 3Д движка на j2me
WISHMASTER35
ну смотря для каких целей |
Ответ: создание 3Д движка на j2me
Цель у меня - быстрее. А какие цели могут быть?
|
Ответ: создание 3Д движка на j2me
WISHMASTER35
не бывает просто "самого быстрого алгоритма сортировки" потому что если ты выберешь один, а потом подсунешь ему 10 млн ячеек то он загнётся для выбора алгоритма надо смотреть как уже упорядочены входные данные и какое количество обьектов надо отсортировать для <=1000 самый быстрый это сортировка шелла |
Ответ: создание 3Д движка на j2me
С сортировкой Шелла фпс вырос на 16. Это очень хорошо.
А нельзяли этот алгоритм еще как нибудь оптимизировать? Может быть ту таблицу изменить которая используется этим алгоритмом? Я толком не понял для чего та таблица, но там такие большие числа, а у меня полигонов максимум 1000. |
Ответ: создание 3Д движка на j2me
WISHMASTER35
изучай алгоритмы сортировки :) может и можно |
Ответ: создание 3Д движка на j2me
Я так понимаю, если у меня максимум полигонов 1000, то заносить в ту таблицу числа больше 1000 смысла нет. Правельно?
|
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
|
Ответ: создание 3Д движка на j2me
Вложений: 2
вот мой двихок с сортировкой Шелла.
|
Ответ: создание 3Д движка на j2me
Не пойму как твоя з-буфферизация мне в этом поможет.
Врё равно праверяться перекрывает пиксель одного полигона пиксель другова будет у всех полигонов. |
Ответ: создание 3Д движка на j2me
Цитата:
Слушай, иди попрогай на OpenGL на компе, а потом уже перейдешь на Java... Ты ничего не выдавишь из этого, если не будешь знать основ графики... По программированию 3Д графики на Java книг мало(если вообще есть, хз), а вот по OpenGL - целая куча. Даже если не будешь программировать под комп - прочитай хотя бы одну умную книгу по OpenGL и у тебя сразу отпадёт куча вопросов, которые ты тут задаешь... |
Ответ: создание 3Д движка на j2me
Проблема в том, что на не видемые полигоны или их части потратится время.
А я хочю, если на дисплее в этом месте уже рисовался полигон, то в следующем полигоне его части, которые в этом месте вообще пропуститились и не делать для них каких-то вычислений. Но в этом случае навена надо будет рисовать полигоны от ближнего к дальнему. Книгу еще надо скачать. А когда они весят 20, а то и 50 мб это проблематично. |
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
Цитата:
Цитата:
http://depositfiles.com/ru/files/7657084 - 2.93 мб http://depositfiles.com/files/yon7cmqy7 - 17 мб. |
Ответ: создание 3Д движка на j2me
Положительная сторона з-буфера это, то, что точно определяется какой пиксель виден, а какои нет. И для не видемых пикселей не надо высчитавать свет и текстурные координаты. Но для каждого полигона, для каждого эго пикселя надо надо высчитать расстояние. А это наверна очень долго. Формула которая высчитует это расстояние большая?
По-моему я когда-то видел статью в которой написано было, что не видемые части полигона надо отсекать. |
Ответ: создание 3Д движка на j2me
>Формула которая высчитует это расстояние большая?
vec=pos*WorldViewProj; - тут vec.z - это и будет та координата. Если не понял - vec=pos*(WorldMatrix*ViewMatrix*ProjMatrix); - это код вычисления положения пикселя на экране. В любом случае должен выполнятся при отрисовке. При этом значения X и Y - значения в пределах [-1; 1], указывающие положение результирующей точки на экране, а Z(используется только при Z-буферизации) - значение в пределах [0; 1], которое и нужно записать в Z-буфер. |
Ответ: создание 3Д движка на j2me
Как я понял освещение и цвет пикселов вычисляются после того как все полигоны добавлены в з-буфер.
Только я не понял, если в з-буфер сначало не цвета заносятся, то что??? |
Ответ: создание 3Д движка на j2me
WISHMASTER35
z-buffer это такая текстура, мы сначала высчитываем глубину пикселя и сравниваем с уже записаной, если записаная меньше - игнорируем наш пиксель и идем к другому если записаная больше, высчитываем цвет для нашего пикселя, записываем цвет в результирующий буфер, записуем глубину в z-buffer |
Ответ: создание 3Д движка на j2me
Вычисляем цвет, а потом этот цвет еще 100 раз замазываем.
|
Ответ: создание 3Д движка на j2me
WISHMASTER35
для того z-buffer и придумали, ты рисуешь полигоны от ближнего к заднему, при этом цвет ты вычисляешь только для ближних, потому что задние стоят за ближними и отсекаются z-buffer'ом |
Ответ: создание 3Д движка на j2me
Я хотел сделать, чтобы в з-буфер записывалась ссылка на полигон. А потом когда все полигоны записаны в массив брать каждую ссылку на полигон и рисовать тот пиксель. Так бы лишний раз цвет не вычислялся. Но запись ссылок в массив это очень медленно. Хотя можно записывать номера полигонов. Но хз как потом определить цвет пикселя. Вообщем была такая тупая идея.
|
Ответ: создание 3Д движка на j2me
WISHMASTER35
парень, ты с какой планеты ? я тебе обьяснил нормальным языком, рисуем полигон, получаем глубину пикселя, если z-buffer говорит о том что этот пиксель ВИДИМ - вычисляем для него цвет и рисуем на экран если он НЕВИДИМ - цвет вычислять НЕ НАДО ! |
Ответ: создание 3Д движка на j2me
Интересно на сколько понизит фпс вычисление глубины пикселя.
Еще сильно мешает какая-то фигня. Если заполнять массив и рисовать ргб массив, то фпс сильно понижается. А если это делать по-отдельности, то фпс почти не понижается. П.с. Я лучше буду использовать вместо сравнения глубины пикселя boolean. Всё равно полигоны уже отсортированы. |
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
WISHMASTER35 - если делать 3D-кубик, дальше этой цели не уйдете.
Полигоны - это для простых фигур, а если видна только часть полигона, то простейшее решение это z-buffer. ____ касательно j2me: если хотите сделать свой 3D-движек, и чтоб это работало с приемлемой скоростью, необходимо использовать минимум 3D-граней, и ограничить размеры области вывода, например 100x75 pixels и т.д. Сортировка граней - это доп.оптимизация, когда будет уже реально работающий проект, которая покажет целесообразность применения, или полный отказ от этого метода, в связи с качеством отображения и скоростью работы в целом. ____ простой 3D алгоритм рисования текстурированных граней c z-buffer'ом (TurboPascal) www.boolean.name > Проекты > Проекты на MidletPascal > The Maze > demo.zip (искать на первых страницах) url: http://forum.boolean.name/attachment...achmentid=4983 |
Ответ: создание 3Д движка на j2me
Минимум граний и минимум разрешения это само-собой. Только 100-75 очень мало.
|
Ответ: создание 3Д движка на j2me
Кстати, в з-буфер можно записывать не глубину пикселя, а номер конца горизонтальной линии. А потом когда рисовать, если -1, то нарисовать точки, если, что-то другое, то перейти на этот конец линии. Таким образом пропускаем лишний цикл и проверки. Мне оно прибавило где-то 1 фпс.
Вот http://upwap.ru/469108 сделал, чтобы рисовалось в ргб массив. Теперь, даже, если фигура не видна, то фпс и до 50 почему-то недоходит. |
Ответ: создание 3Д движка на j2me
WISHMASTER35
если вся модель не попадает в срезаную пирамиду "зрения" камеры, то её просто не нужно посылать на рендер, обычно вокруг модели строят параллелепипед и проверяют попадает ли он или его часть в срезаную пирамиду |
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
У меня сейчас каждый полигон проверяется виден ли на дисплее. И фпс это не забрало.
|
Ответ: создание 3Д движка на j2me
Вот исходники http://upwap.ru/469622 движка с рисованием в массив.
Но теперь там какая-то мистика. Один простейший метод G3D.clear заберает аж 50 фпс. Как это можно исправить? Или это баг джава-машины? |
Ответ: создание 3Д движка на j2me
Не, использовать з-буфер или какой-то другой массив нельзя. Чтобы, только его заполнить надо много фпс потратить. Надо одним массивом обойтись. Может сделать, если цвет пикселя равен -1, то рисовать в этот пиксель. Или другое число вместо -1.
|
Ответ: создание 3Д движка на j2me
A без очистки з-буфера можно как-то обойтись?
|
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
Сдесь http://ru.wikipedia.org/wiki/Z-буферизация написано, что чтобы не заполнять буфер каким-то числом часто делают так: первый кадр буферизация настраивается так, чтобы глубина ближних объектов была 0 ,0 , а дальних - 0 ,5 . Второй кадр - от 1 ,0 до 0 ,5 . Это снижает точность на 1 бит, но позволяет избавиться от очистки буфера.
Но я, что-то не пойму как это. Можете доходчевее объяснить. |
Ответ: создание 3Д движка на j2me
Цитата:
1. чистим буфер 2. рендерим кадр №1, считаем значения глубины для пикселей. При этом если значение>=1 записываем 0.5, иначе - множим значение на 0.5 и пишем его в буфер. 3. рендерим кадр №2, считаем значения глубины для пикселей. При этом если значение>=1 записываем 1, иначе - множим значение на 0.5, добавляем к результату 0.5 и пишем его в буфер. 4. идём к пункту 1 |
Ответ: создание 3Д движка на j2me
У меня, есть идея.
Записывать в з-буфер номер текущего кадра. А потом проверять, если текущий кадр=100 и в з-буфере=100, то этот пиксель уже рисовался в этом кадре. Таи можно будет очистку з-буфера очень редко. Или вообще не делать. Как идея? |
Ответ: создание 3Д движка на j2me
А в int'e за альфа канал первый или четвёртый байт отвечает?
Я думаю может этот альфа канал использовать как з-буфер. А то лишняя запись в массив много фпс забирает. |
Ответ: создание 3Д движка на j2me
8 бит для z-буфера - это катастрофически мало. Даже не пытайся.
|
Ответ: создание 3Д движка на j2me
WISHMASTER35
для Z буфера надо минимум 16 бит, но желательно 24 бита тебе не кажется что если до тебя этого не сделали, то это технически почти не реализуемо ? для быстрой 3д графики просто необходим векторный процессор - графический ускоритель |
Ответ: создание 3Д движка на j2me
Вычислять расстояние для каждого пикселя я не буду. У меня сейчас не з-буфер, а f-buffer (frame buffer) в этот массив записуется номер кадра в котором был задан цвет пикселю. Этот массив у меня сейчас из байт, так, что 8 бит хватает.
Не факт, что до меня чего-то из моих идей не реализовывал кто-то другой. Не все ж движки с открытым исходным кодом. Я вообще делаю движок для мобильного, поетому мне приходится придумывать, что-то что проще и быстрее, чем в комповских движках. Хочется сделать движок как в контр тероризм-2. Кстати, в той игре псевдо 3д или 3д? По-моему, если в той игре, есть модели компов, вертолётов и др, то псевдо это уже не может быть. |
Часовой пояс GMT +4, время: 04:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot