Могу ли я один раз нажать свою матрицу для статических объектов в OpenGL? - PullRequest
1 голос
/ 18 мая 2019

Мне нужно понять, могу ли я вызвать 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 Ответ

2 голосов
/ 19 мая 2019

Обратите внимание, что рисование с помощью glBegin / glEnd последовательностей и набора матриц фиксированных функций устарело с десятилетий.См. конвейер с фиксированными функциями и Legacy OpenGL .
Подробнее о Спецификации вершин и Шейдер для получения информации о современном способе рендеринга.


glBegin начинает последовательность Примитивов и glEnd заканчивает последовательность.
Конечно, вы можете нарисовать несколько последовательностей примитивовв вашем коде.

Координаты вершин примитивов задаются с помощью glVertex.Каждая координата vertec преобразуется текущим видом модели и матрицей проекции (см. glMatrixMode).

Но обратите внимание, что нельзя изменять текущую матрицу в пределах glBegin / glEnd последовательность.Единственные допустимые команды после glBegin (и до glEnd) - это команды, которые устанавливают координаты вершины и устанавливают соответствующие атрибуты, такие как glVertex, glColor, glNormal, glTexCoord ...

Такие инструкции, как glColor, glNormal, glTexCoord ... изменяют текущие атрибуты, которые связаны с вершиной, когдаglVertex называется.Эти инструкции также могут быть выполнены до последовательности glBegin / glEnd.

...