Войти
ПрограммированиеФорумГрафика

Вывод разных объектов( с текстурами и без) как лучше в OpenGL 4

#0
15:22, 1 ноя. 2013

Все привет!
Хочу обсудить тему о том как лучше построить отрисовку разных объектов в сцене и с помощью каких методов, технологий.

Собственно есть в сцене 3 пересекающиеся плоскости с наложенными на них текстурами, которые перемещаются по ортогональным осям.
Теперь нужно еще отобразить оси системы координат, и вот думаю как быть?

Оси рисовать через вершинный буфер?

Для каждого объекта нужно создавать буфер? А если много разных объектов(10-50), для всех создавать VBO и VAO?

У каждого объекта должна быть своя modelMatrix? И при выводе в MVP  подставлять именно её?
В ранних версиях OpenGL были такие методы  glPushMatrix() glPopMatrix(), теперь нужно создавать все матрицы самому и получается,
что стек матриц нужно реализовывать самому? Может есть примеры?
Как переместить один объект не затрону другой?

Если некоторые объекты с текстурами а другие без, тогда нужно иметь для них разные шейдерные программы и шейдеры?

Какие общие принципы по разработке приложение которые сложнее чем вывод треугольника или куба с текстурами?

Где можно собрать информацию о том как разрабатываются программы для работы с графикой.

Поделитесь пожалуйста у кого есть опыт работы с графикой, как вообще пишутся серьезные программы.


#1
20:43, 1 ноя. 2013

На большую часть вопросов можно получить ответ просмотрев уроки, которые я делал и размещал в свободном доступе: http://www.gamedev.ru/community/ogl/articles/

#2
22:31, 1 ноя. 2013

Я как раз по ним все и смотрю, но там рассмотрены конкретные примеры. 
И пока вопросы остаются                                                                                 

#3
23:31, 1 ноя. 2013
В ранних версиях OpenGL были такие методы  glPushMatrix() glPopMatrix(), теперь нужно создавать все матрицы самому и получается,
что стек матриц нужно реализовывать самому? Может есть примеры?
+ Показать
У каждого объекта должна быть своя modelMatrix? И при выводе в MVP  подставлять именно её? Как переместить один объект не затрону другой?
PushMatrix();
Translate(dx, dy, dz);
Draw(); // в шейдер передается modelViewMatrixStack.TopMatrix() * projectionMatrixStack.TopMatrix()
PopMatrix();
Если некоторые объекты с текстурами а другие без, тогда нужно иметь для них разные шейдерные программы и шейдеры?

В общем случае, да.

Поделитесь пожалуйста у кого есть опыт работы с графикой, как вообще пишутся серьезные программы.

Читаешь документацию, книги и форумы -> Обдумываешь прочитанное -> Переписываешь код программы -> Если программа еще недостаточно серьезна, то начинаешь еще одну итерацию

#4
22:06, 8 ноя. 2013

стремятся минимизировать переключения различных стейтов (шейдеров/буферов/текстур и др) и дипов - все это грузит цпу
-текстуры объединяют в текстурные массивы/атласы
-однотипную геометрию засовывают в 1 vbo/ibo, чтобы не переключать буферы часто
-используют небольшое количество моделей освещения (чаще всего phong)

на гаждую геометрию свой dip (draw indexed primitive - вызов glDrawElements)
используют лоды геометрии
для уменьшения количества dip'ов, трансформаций всю геометрию с одним материалом (одинаковыми шейдерами/текстурами и т.д.) предрассчитывают и объединяют в 1 dip (скажем в ячейке quad дерева с лодом >=2)
несколько объектов с одной геометрией и материалом выводят инстансингом (параметры для каждого объекта - трансформации и др. через uniform buffer/texture buffer для статики/динамики)

#5
9:57, 9 ноя. 2013

для шейдерного инстансинга все трансформации объектов (WVP) запекают в одну текстуру (в вершинный шейдер передают индексы), как делают в BF3 и FC3.

#6
14:46, 9 ноя. 2013

PVSector
честно говоря не слышал о таком - пруф можно/ссылочки?
что-то мне кажется что профита будет мало
просто одной mvp не обойдешься, нужна еще как минимум normal matrix - 2 матрицы в вершинном шейдере получать для каждой вершины...
+все это пересчитывать каждый кадр с float32 точностью для каждого объекта

#7
20:01, 9 ноя. 2013

http://dice.se/wp-content/uploads/GDC11_DX11inBF3_Public.pdf
начиная с 27 слайда

#8
22:47, 9 ноя. 2013

PVSector
>для шейдерного инстансинга все трансформации объектов (WVP) запекают в одну текстуру
хранятся обычно только world трансформации объектов (либо 3 строки world матрицы, либо позиция+кватернион)
инстанс данные не в текстурах хранятся, а в специальных буферах: Uniform Buffer Object, Texture Buffer Object, Shader Storage Buffer Object

предрассчитывание worldViewProjection матриц честно не видел никогда, в статье именно про wvp тоже не написано

ПрограммированиеФорумГрафика

Тема в архиве.