我可以为 OpenGL 中的静态对象推送一次矩阵吗?

Can I push my matrix for one time for static objects in 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,用于项目优化。另外,如果我能做到,我还有第二个问题。我可以一次绘制静态多边形,然后在渲染函数中每次绘制非静态(移动)多边形吗?

请注意,glBegin/glEnd sequences and the fixed function matrix stack is deprecated since decades. See Fixed Function Pipeline and Legacy OpenGL 绘制的那幅画。
阅读 Vertex Specification and Shader 了解最先进的渲染方式。


glBegin starts a sequence of PrimitivesglEnd 结束序列。
当然,您可以在代码中绘制多个图元序列。

图元的顶点坐标由glVertex. Each vertec coordinate is transformed by the current model view and projection matrix (see glMatrixMode)设置。

但请注意,不允许在 glBegin/glEnd 序列中更改当前矩阵。 glBegin 之后(和 glEnd 之前)唯一允许的命令是设置顶点坐标和设置相应属性的命令,如 glVertexglColorglNormal , glTexCoord...

glColor, glNormal, glTexCoord这样的指令......改变当前属性,当glVertex被调用时,它与顶点相关联。此指令也可以在 glBegin/glEnd 序列之前执行。