Могу ли я один раз нажать свою матрицу для статических объектов в OpenGL?
Мне нужно понять, могу ли я вызвать glBegin, glEnd, для моего проекта только один раз.
Я попытался вызвать функцию myRender один раз, не для каждого тика, но она удаляет все многоугольники на втором кадре.
Мой тик событие
public void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.925f, 0.98f, 0.988f, 1f);
glPushMatrix();
game.tickRender();
glPopMatrix();
}
Я пробовал это
public void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.925f, 0.98f, 0.988f, 1f);
}
public void begin(){
glPushMatrix();
game.tickRender();
glPopMatrix();
}
Мне нужно рассчитать myMatrix один раз, для оптимизации проекта. Также, если я могу это сделать, у меня второй вопрос. Могу ли я рисовать статические полигоны один раз, а нестатические (движущиеся) полигоны в функции рендеринга каждый тик?
1 ответ
Обратите внимание, что рисунок по glBegin
/ glEnd
Последовательности и стек матрицы с фиксированными функциями устарели с десятилетий. См. Фиксированный конвейер функций и устаревший OpenGL.
Читайте о Vertex Specification и Shader, чтобы узнать о современном способе рендеринга.
glBegin
запускает последовательность примитивов и glEnd
заканчивает последовательность
Конечно, вы можете нарисовать несколько последовательностей примитивов в вашем коде.
Координаты вершин примитивов задаются glVertex
, Каждая координата vertec преобразуется текущим видом модели и матрицей проекции (см. glMatrixMode
).
Но обратите внимание, что нельзя изменять текущую матрицу в пределах glBegin
/ glEnd
последовательность. Единственные разрешенные команды после glBegin
(и до glEnd
) - это команды, которые устанавливают координату вершины и устанавливают соответствующие атрибуты glVertex
, glColor
, glNormal
, glTexCoord
...
Инструкции как glColor
, glNormal
, glTexCoord
... изменить текущие атрибуты, которые связаны с вершиной, когда glVertex
называется. Эта инструкция может быть выполнена до glBegin
/ glEnd
последовательность тоже.