Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.09.2010, 23:05
deamoK вне форума Посмотреть профиль Отправить личное сообщение для deamoK Найти все сообщения от deamoK
  № 1  
Ответить с цитированием
deamoK
 
Аватар для deamoK

Регистрация: Sep 2010
Сообщений: 57
По умолчанию drawTriangles и z-sort

Народ, кто может помочь решить проблему:
Рендерю модельку с несколькими текстурами при помощи нескольких drawTriangles, но as3 3d api не сортирует полигоны, которые должны рисоваться. Как были объявлены треугольники в модельке, так и рисует >.<
Еффект, мягко говря, немного нереалистичный...
Для сортировки полигонов использующих токо одну текстуру запихивал все в массив и методом sortOn сортировал по свойству z и все замечательно, но для полигонов у которых разные текстуры это не прокатит, тк drawTriangles принимает токо одну заливку =\
Как сортировать полигоны?

Старый 30.09.2010, 23:33
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Почитайте про GraphicsPath - может, наведет на нужные мысли.
А вообще - я бы сделал несколько Shape, у каждой из которых будет своя текстура для вывода. Ну и, соответственно, после сортировки полигонов учитывал их текстуру - то есть, если текстура данного полигона отличается от текстуры предыдущего, то данный полигон рисуем в другой шейп. Если нет - то в тот же. Тут как раз и пригодится IGraphicsData
__________________
...вселенская грусть

Старый 01.10.2010, 15:08
deamoK вне форума Посмотреть профиль Отправить личное сообщение для deamoK Найти все сообщения от deamoK
  № 3  
Ответить с цитированием
deamoK
 
Аватар для deamoK

Регистрация: Sep 2010
Сообщений: 57
неплохо))) еще и с "освещением" ))
но, попытаюсь сделать так:

Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Почитайте про GraphicsPath - может, наведет на нужные мысли.
А вообще - я бы сделал несколько Shape, у каждой из которых будет своя текстура для вывода. Ну и, соответственно, после сортировки полигонов учитывал их текстуру - то есть, если текстура данного полигона отличается от текстуры предыдущего, то данный полигон рисуем в другой шейп. Если нет - то в тот же. Тут как раз и пригодится IGraphicsData
попробую разбить всю модельку на полигоны, в каждом будет по 3 координаты и материал, потом сортирую по средней арифм z, и забиваю в GraphicsData.
GraphicsBitmapFill-GraphicsTrianglePath-GraphicsEndFill
Если другой материал следующего полигона, значит забиваю в новую тройку fill, tris, endfill...
потом drawGraphicsData...
=\ пошел думать
(хм, думаю, если один полигон будет налезать на другой, один из них будет полностью покрыт верхним)

Старый 01.10.2010, 15:49
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от deamoK Посмотреть сообщение
попробую разбить всю модельку на полигоны, в каждом будет по 3 координаты и материал, потом сортирую по средней арифм z, и забиваю в GraphicsData.
GraphicsBitmapFill-GraphicsTrianglePath-GraphicsEndFill
Если другой материал следующего полигона, значит забиваю в новую тройку fill, tris, endfill...
потом drawGraphicsData...
=\ пошел думать
А те. вы сами решили надумать, дело в том что я во вложении прикрепил архив зип, он называется blender.zip там так и сделано, если не смотрели архив то вот кусок кода
Код AS3:
//отрисовка
if (debug) gr.lineStyle(0,0x408080);
gr.beginBitmapFill(my3Obj.bmd);
gr.drawTriangles(lvr, lind, luv , TriangleCulling.POSITIVE);
return zCoord;
drawTriangles это и есть GraphicsTrianglePath, только лучше, тк его не надо создавать. Не если сами будете думать, то что-ж.
__________________
Гоночка

Старый 30.09.2010, 23:38
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Можно склеивать текстуры на одной битмапе, и рисовать треугольники, заливая ей.
Т.е. есть например слой - имитация затенения по фонгу,
второй слой - сама текстура.
1. copyPixels основной текстуры в общую битмап-дату
2. расчет освещения, отрисовка всего этого добра на shape в координатах текстуры,
3. отрисовка shape на общую битмапу
4. рисование треугольников в экранных координатах с заливкой общей битмапой
По скорости почти тоже самое должно получиться - если бы треугольники все стразу рисовались - рендерилось бы такое же количество треугольников, тололько сразу а не в 2 этапа.

Бонус - отрисовка текстуры на одной битмапе дает более гибкие настройки по склейке слоев


Последний раз редактировалось expl; 30.09.2010 в 23:41.
Старый 30.09.2010, 23:43
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 6  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Можно склеивать текстуры на одной битмапе, и рисовать треугольники, заливая ей.
Чем это поможет при сортировке? Ведь придется рассчитывать текстурные координаты заново. Как я понял, итоговая текстура уже имеется, ее нужно только вывести правильно.

Кстати, deamoK, рекомендую Вам использовать класс Vector и собственную функцию сортировки. Ибо так оно побыстрее =)
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 30.09.2010 в 23:45.
Старый 30.09.2010, 23:51
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 7  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Можно рендерить со многими текстурами, ну к примеру с двумя. Делаете битмап в который отрисовуете первую текстуру а с права вторую. Получится битмап с двумя текстурами, с лева одна справа другая, не знаю какая у вас цель. Однако подозреваю, к примеру, отрисовать свет и нанести затем какой-то рисунок на модельку.
Ну так с рисуном проблем нет, он делается в 3Д редакторе и у негу естественно будут UW координаты, при отрисовке их можно
Код AS3:
uwx = 0.5+uwxObj*0.5;
Теперь суем в массив треугольников на торисовку сначала треугольник с первой половины битмапа, а затем со второй, так они наложаться один на другой, естественно он должен быть с прозрачностью.
__________________
Гоночка

Старый 30.09.2010, 23:56
deamoK вне форума Посмотреть профиль Отправить личное сообщение для deamoK Найти все сообщения от deamoK
  № 8  
Ответить с цитированием
deamoK
 
Аватар для deamoK

Регистрация: Sep 2010
Сообщений: 57
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Чем это поможет при сортировке? Ведь придется рассчитывать текстурные координаты заново. Как я понял, итоговая текстура уже имеется, ее нужно только вывести правильно.

Кстати, deamoK, рекомендую Вам использовать класс Vector и собственную функцию сортировки. Ибо так оно побыстрее =)
Насчет склеивания в одну битмапдату была мысль, но токо сразу же от нее отказался, тк ето извращение и, действительно, еще снова uv-координаты пересчитывать...


Vector токо и использую
Собственную функцию сортировки я и хочу сделать, только алгоритм мне подскажите =\
По сути, мой просмотрщик моделек работает, за исключением сортировки...
Переворошил away3dlite, там как-раз и рисуют несколько моделей с разными материалами, но после неск часов изучения той функции (sortFaces в BasicRender) уже начали кипеть мозги, там зло какое-то. Но он работает, так что придется еще его поизучать, ну лучше кончено просто знать алгоритм

Добавлено через 3 минуты
Цель: сделать просмотрщик моделек из квачи, дума, вобщем MD5Mesh моделек.
Просто для себя, justfun, может пригодится, кто знает
Хочу еще прикрутить MD5Anim для анимации, но сначала было бы неплохо с норм отображением разобраться =\

Старый 01.10.2010, 01:38
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от deamoK Посмотреть сообщение
Насчет склеивания в одну битмапдату была мысль, но токо сразу же от нее отказался, тк ето извращение и, действительно, еще снова uv-координаты пересчитывать...
Всего делов-то разделить на 0.5 и прибавить 0.5 же
Код AS3:
lvr.push(vr[j], vr[j + 1], vr[j + 2], vr[j + 3], vr[j + 4], vr[j + 5]);
 
lvr.push(vr[j], vr[j + 1], vr[j + 2], vr[j + 3], vr[j + 4], vr[j + 5]);
 
luv.push(0.6, normS[k], 1, normS[k], 0.6, normS[k]);
 
 
luv.push(uv[j] /2, uv[j + 1], uv[j + 2] /2, uv[j + 3], uv[j + 4] /2, uv[j + 5]);
Как и говорил k это свет для грани, а uv[j] это координата объекта uv из 3Д редактора
100 лет не открывал свой самодельный 3Д двиг и вот открыл 5мин и готово 2 текстуры на одном объекте, на заднем фоне их видно, куб можно крутить слайдерами, этакий псевдо свет получился.
Вложения
Тип файла: zip blender.zip (51.1 Кб, 39 просмотров)
Тип файла: swf Doc_.swf (13.0 Кб, 38 просмотров)
__________________
Гоночка

Старый 01.10.2010, 01:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Насчет склеивания в одну битмапдату была мысль, но токо сразу же от нее отказался, тк ето извращение и, действительно, еще снова uv-координаты пересчитывать...
Если посмотреть сколько тратиться на сам рендеринг, то можно считать, что пересчет координат делается процессором за даром,
на счет изврата не знаю - по крайней мере в одной из версий Papervision так делали

Однако, да, есть более объективные недостатки такого подхода:
- если текстура зеркалится (т.е. одна и та же половина человека используется для одной и другой половины модели) - то освещение корректно не наложишь - придется дублировать текстуру
- если объект состоит из нескольких и они динамически меняются - придется менять размер текстуры для каждой комбинации объектов, и искать место для нескольких объектов на одной общей текстуре, т.е. метод подходит только для неизменного количества объектов.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.