在OpenGL ES 1.1 for iOS中使用照明线的奇怪行为

时间:2011-07-30 14:44:46

标签: iphone ios ipad opengl-es

我正在为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();
}

1 个答案:

答案 0 :(得分:0)

好的,我已经解决了。

glColor4f用于设置颜色关闭。打开光照时,OpenGL使用对象的材质属性来设置颜色。当我绘制线条时,材质属性被设置为敌人的材质属性,我需要做的就是为线条设置它。