|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.07.2014, 19:15 | #1 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Работа с VBO(OpenGL). Оптимизация
Обращаюсь к знатокам VBO. Допустим я загружаю в буфер координаты круга(2D), которых больше сотни в таком формате: координата края, координата цента, координата края, координата центра и т.д. Если отдать их GL_TRIANGLE_STRIP, то получится окружность. Все это является планетой на которой могут быть постройки и т.п. вещи. Эта планета должна вращаться. Таким же макаром я изображаю космические корабли. Координаты всех и вся находятся в памяти видеокарты. Берем космический корабль и передвигаем его, предположим, на 1 метр вверх. В GL координатах это +0.01. Ради интереса представим, что он состоит из большого числа полигонов. Что будет быстрее работать glTranslatef() или перезаливка информации в буфер? А если под капотом собственный физический движок которому необходимы координаты этих тел?
P.S. У меня на этот счет имеются мысли, однако хочется услышать мнение бывалых OpenGl'ников P.P.S. Забыл спросить, адекватен ли описанный выше алгоритм изображения круглых объектов или есть вариант с меньшим использованием ресурсов? |
21.07.2014, 21:17 | #2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
всегда и везде пересылка данных/запись в память самая медленная операция. поэтому оптимизация это в первую очередь сокращение количества операций с памятью и в последнюю очередь сокращение кол-ва вычислительных операций.
в плане отрисовки объектов состоящих из большого кол-ва треугольников при минимуме вершин на входе конвейера достаточно большую пользу можно извлечь от использования геометрического шейдера, на мой взгляд. Последний раз редактировалось f.hump; 21.07.2014 в 21:34. |
22.07.2014, 11:18 | #3 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
И все-таки, как лучше выполнять движение объекта? Трансформировать матрицу или есть какие-то другие способы? Загружать новые координаты в видеопамять довольно глупо.
|
22.07.2014, 21:43 | #4 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
в целом, изменение кординат вершин описывается некоторой матрицей 4х4.
выбор тут особо не велик, просчитать матрицу преобразования, пересчитать координаты вершин на CPU и переслать результат на видиокарту, либо переслать матрицу на видиокарту и пересчитать координаты на видеокарте. в принципе, по личному опыту, при кол-ве вершин меньше 20 тысяч и правильной организации координат вершин в памяти можно весь счет делать на CPU. и в целом, довольно часто лишь небольшая часть елементов сцены меняет свои координаты, поэтому их удобно пересчитывать на CPU и проводить выборочное обновление буфера координат (glBufferSubData). повороты камеры, однозначно, делать только на видеокарте. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VBO VAO и несколько GL_ELEMENT_ARRAY_BUFFER | gunsoy | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 12.02.2014 12:36 |
Работа с Opengl | Алексей_Warm | Фриланс | 1 | 23.12.2012 16:28 |
Работа с opengl | Алексей_Warm | Помощь студентам | 0 | 22.12.2012 17:31 |
VBO OpenGL | jec | Общие вопросы C/C++ | 1 | 05.10.2010 03:14 |
Работа с TXMLDocument, оптимизация кода, тонкости работы | Alter | Общие вопросы Delphi | 2 | 05.07.2010 11:15 |