1

我需要了解我可以为我的项目调用 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 一次,以进行项目优化。另外,如果我能做到,我还有第二个问题。我可以一次绘制静态多边形,并且每次滴答都在渲染函数中绘制非静态(移动)多边形吗?

4

1 回答 1

2

请注意,由glBegin/glEnd序列绘制和固定函数矩阵堆栈自几十年以来已被弃用。请参阅固定功能管道旧版 OpenGL
阅读有关顶点规范着色器的信息,了解最先进的渲染方式。


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

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

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

glColor, glNormal, ...等指令更改当前属性,该属性在调用glTexCoord时与顶点相关联。glVertex该指令也可以在glBegin/glEnd序列之前执行。

于 2019-05-19T15:40:53.883 回答