Могу ли я один раз нажать свою матрицу для статических объектов в 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 последовательность тоже.

Другие вопросы по тегам