Z-слои в честной сортировке
28.07.2007 Антон ВолковЧестная Z-сортировка распределяет полигоны по слоям, по сути выполняя работу дизайнера в Photoshop/Flash.
Архив за Июль, 2007Z-слои в честной сортировке28.07.2007 Антон ВолковЧестная Z-сортировка распределяет полигоны по слоям, по сути выполняя работу дизайнера в Photoshop/Flash. 3D-интерактивность и скульпт-демо27.07.2007 Антон ВолковМесяца полтора назад ещё в 3D-движке 2-й версии мы делали механизм интерактивного взаимодействия с 3D-объектами. Самым простым решением было бы переводить MouseEvent в 3D-пространство. Однако, оказалось, что при сравнительно большом количестве полигонов (уже при 1000) система событий Flash начинает ощутимо тормозить при любом сдвиге мыши. Дело в том, что MouseEvent’ы достаточно универсальны и потому медленны, ведь надо событие пробублить (отправить от источника к сцене через всех родителей), да ещё не забыть посчитать координаты мыши относительно каждого объекта. В итоге решили отказаться от mouseEnabled полигонов, ловить мышиные события с хит-области камеры, а дальше через getObjectsUnderPoint ловить попавшие в точку полигоны и далее делать обработку. Тогда мы это успешно реализовали и даже сделали свой 3D-бублинг, когда каждый клик проходил через грани, 3D-объекты и т.п. вполть до камеры. В новой третьей версии благодаря наличию математической модели содержимого камеры мы смогли сделать систему интерактивности полностью на математических расчётах. Благодаря нюансам и всяческим оптимизациям удалось даже легко отрабатывать и MOVE, и OUT и OVER, в том числе пообъектно. От 3D-бублинга мы отказались, т.к. он для наших нужд не пригодился. Если что - легко добавить. В качестве эксперимента небольшие кривоватенькие демки скульпт-редактора:
Загруженные с сервера домики26.07.2007 Антон ВолковAlternativa3D All-in-one26.07.2007 Антон ВолковУже видно, что концепция третьей версии 3D-движка позволяет сравнительно легко расширять и модифицировать систему. Как вариант, есть возможность сделать разные виды камеры — ортогональный/перспективный, с честной сортировкой/по средней глубине. Это внушает надежду на разнообразное применение нашего движка в других проектах. Правильный шейдинг26.07.2007 Антон ВолковПоняли, что вчерашняя формула квадратичного отражения света от объекта некорректна. Предлагаю на оценку пару демок: Управление:
Блики у материалов25.07.2007 Антон ВолковСделали несколько оптимизаций расчёта освещения.
Восстанавливаем освещение25.07.2007 Антон ВолковПервый 3D-контакт клиента с сервером24.07.2007 Антон ВолковВчера вечером произошло знаменательное событие. Условия работы для “серверных” не выносимые — отключена админка в связи с затянувшейся переделкой GUI-библиотек. Надо отметить, что самый первый треугольник был загружен ещё месяц назад, но никакого развития не получилось в связи с разработкой Alternativa3D 3.0 и серьёзными изменениями в ядре. Инверсные матрицы24.07.2007 Антон ВолковВосстановили расчёт инверсных матриц. В процессе тестов получилась симпатичная загигулина: По нажатию на любую кнопку загигулина строится по новым параметрам. Также можно попробовать загигулину с поворотом камеры Оптимизация Flash на низком уровне23.07.2007 Антон ВолковДумаю, что принципиальная возможность есть. Но, честно говоря, пока в процессе разработки влазить в это смысла нет. Когда 3D-движок доведём хотя бы до готовности 90%, тогда решим. Хорошо будет сделать низкоуровневую оптимизацию для честной Z-сортировки. Можно поиграться с простеньким декомпилятором. Возможно, это наведёт на мысли по оптимизации исходного кода. Например, метод переноса матрицы выглядит на Flash-ассемблере так: function translate(Number, Number, Number):void { /* disp_id 0*/ // local_count=4 max_scope=1 max_stack=3 code_len=36 0 getlocal0 1 pushscope 2 findproperty d 5 getlex d 8 getlocal1 9 add 10 initproperty d 13 findproperty h 16 getlex h 19 getlocal2 20 add 21 initproperty h 24 findproperty l 27 getlex l 30 getlocal3 31 add 32 initproperty l 35 returnvoid } | |
|
| |