我需要了解我能否为我的项目一次调用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序列和固定函数矩阵堆栈进行绘制。请参见Fixed Function PipelineLegacy OpenGL
阅读有关Vertex SpecificationShader的最新渲染方式。



glBegin开始一个序列Primitives,而glEnd结束该序列。
当然,您可以在代码中绘制多个基元序列。

图元的顶点坐标由glVertex设置。每个vertec坐标都通过当前的模型视图和投影矩阵进行转换(请参见glMatrixMode)。

但是请注意,不允许在glBegin / glEnd序列内更改当前矩阵。 glBegin之后(和glEnd之前)仅允许使用的命令是设置顶点坐标并设置相应属性的命令,例如glVertexglColorglNormalglTexCoord ...

诸如glColorglNormalglTexCoord ...之类的指令会更改当前属性,这些属性在调用glVertex时与顶点关联。该指令也可以在glBegin / glEnd序列之前执行。

10-02 08:02