这是iPhone 4上的OpenGL。glMaterialfv不适用于我
使用光线和材料绘制场景。这里是我的代码片段: glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustumf(-1,1,-1,1,-1,1);
CGFloat ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
CGFloat diffuseLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };
CGFloat direction[] = { 0.0f, 0.0f, -20.0f, 0 };
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_POSITION, direction);
glShadeModel(GL_FLAT);
glEnable(GL_LIGHTING);
glDisable(GL_COLOR_MATERIAL);
float blankColor[4] = {0,0,0,1};
float whiteColor[4] = {1,1,1,1};
float blueColor[4] = {0,0,1,1};
glMaterialfv(GL_FRONT, GL_DIFFUSE, blueColor);
glEnable(GL_CULL_FACE);
glVertexPointer(3, GL_FLOAT, 0, verts.pdata);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 0, normals.pdata);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawArrays (GL_TRIANGLES, 0, verts.size/3);
问题是,不是看到蓝色漫反射颜色,我看到它是白色的。如果我旋转模型的一面,它会淡出,但我不明白为什么它不使用我的蓝色。
如果我将glMaterialfv(GL_FRONT,GL_DIFFUSE,blueColor)更改为glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,blueColor),那么我确实看到蓝色。如果我这样做glMaterialfv(GL_FRONT,GL_DIFFUSE,blueColor);然后glMaterialfv(GL_BACK,GL_DIFFUSE,blueColor);我再次看到白色。所以它看起来像GL_FRONT_AND_BACK显示它,但其余组合显示白色。任何人都可以向我解释?
正如你在我的代码中看到我指定剔除glEnable(GL_CULL_FACE)。如果我的三角形是错误的方向,它不会隐形吗?无论如何,我做了2个三角形。一个CCW和一个CW顺序。无论我使用什么样的选择:glFrontFace中的GL_CW或GL_CCW我总是看到2个三角形中的一个(因为它们的方向相反),但始终是白色。 –
可能取决于照明?例如强光。尝试改变光线方向和三角形区域之间的角度? –
如果是这样,那么FRONT或FRONT_AND_BACK会有相同的结果 - 白光。无论如何,我尝试弱光,它并没有帮助。 Il扫描我的代码。也许我在OGL的某个地方设置了一些参数来分解它。感谢您的帮助。 –