要为体素游戏制作照明系统,我需要为每个顶点指定一个暗度值。我正在使用GL_COLOR_MATERIAL
并指定每个顶点的颜色,如下所示:
glEnable(GL_COLOR_MATERIAL);
glBegin(GL_QUADS);
glColor3f(0.6f, 0.6f, 0.6f);
glTexCoord2f(...);
glVertex3f(...);
glColor3f(0.3f, 0.3f, 0.3f);
glTexCoord2f(...);
glVertex3f(...);
glColor3f(0.7f, 0.7f, 0.7f);
glTexCoord2f(...);
glVertex3f(...);
glColor3f(0.9f, 0.9f, 0.9f);
glTexCoord2f(...);
glVertex3f(...);
glEnd();
这很有效,但是很多四边形很慢。我也在使用显示列表。关于如何使顶点变暗的任何好主意?
答案 0 :(得分:1)
您正在使用立即模式(glBegin,glEnd以及介于两者之间的所有内容)。如果性能是您所需要的,那么我建议您停止 。
您可能会追求的是通用顶点属性。而且看,现代OpenGL实际上就是这样:通用属性。他们甚至走得很远,做了正确的事情并取消了预定义的属性(位置,颜色,法线,texcoords等),并且在OpenGL-3核心和后来只有通用属性。
函数glVertexAttrib(大部分时间 Uniform 更好地完成工作)和glVertexAttribPointer是你的朋友。使用适当的顶点着色器指定如何处理顶点属性。