我需要了解我能否为我的项目一次调用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 Pipeline和Legacy OpenGL。
阅读有关Vertex Specification和Shader的最新渲染方式。glBegin
开始一个序列Primitives,而glEnd
结束该序列。
当然,您可以在代码中绘制多个基元序列。
图元的顶点坐标由glVertex
设置。每个vertec坐标都通过当前的模型视图和投影矩阵进行转换(请参见glMatrixMode
)。
但是请注意,不允许在glBegin
/ glEnd
序列内更改当前矩阵。 glBegin
之后(和glEnd
之前)仅允许使用的命令是设置顶点坐标并设置相应属性的命令,例如glVertex
,glColor
,glNormal
,glTexCoord
...
诸如glColor
,glNormal
,glTexCoord
...之类的指令会更改当前属性,这些属性在调用glVertex
时与顶点关联。该指令也可以在glBegin
/ glEnd
序列之前执行。