我正在为iPad编写一个带有3D图形的游戏。我使用了许多用线条绘制的线框表面。
直到最近,当我画线时,我总是关掉灯光;我推断线条没有法线,所以照明不起作用。只是为了好玩,我试着打开灯光画出我的线条,看看会发生什么,我得到了一些令人惊讶的结果。
线条以白色绘制,并在关闭照明时显示为白色,但在打开照明时它们会变为彩色。具体来说,线条会变为最后一个敌人的颜色进入屏幕。我也发现白色效果逐渐消失,我认为这与光源的位置有关。
起初我认为我的glColor4f功能被设置为最近绘制的敌人的颜色,但我确实将颜色设置为白色,此外 - 它会在关闭照明时绘制为白色。
以下是绘制线条的代码:
-(void)drawWireFrameWithData:(GLSurfaceData*)bufferData
{
glPushMatrix();
glDisableClientState(GL_NORMAL_ARRAY);
//glDisable(GL_LIGHTING);
glTranslatef(self.centrex, self.centrey, self.centrez);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBindBuffer(GL_ARRAY_BUFFER, bufferData.vertexBuffer);
glVertexPointer(3, GL_FLOAT, 3 * sizeof(GLfloat), 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferData.lineIndexBuffer);
glDrawElements(GL_LINES, bufferData.lineIndexCount, GL_UNSIGNED_SHORT, 0);
glEnableClientState(GL_NORMAL_ARRAY);
//glEnable(GL_LIGHTING);
glPopMatrix();
}
答案 0 :(得分:0)
glColor4f用于设置颜色关闭。打开光照时,OpenGL使用对象的材质属性来设置颜色。当我绘制线条时,材质属性被设置为敌人的材质属性,我需要做的就是为线条设置它。