不寻常的光照效果 - 彩色随机多边形

时间:2011-09-30 14:35:54

标签: objective-c opengl-es lighting normals

我正在创建一个用于iOS的对象加载器,我已经设法从OBJ文件加载顶点,法线和面数据,然后将这些数据放入数组中以重建对象。但我遇到了照明问题,底部是我的程序模拟的视频 - 这是照明在以下位置:

CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f };
glLightfv(GL_LIGHT0, GL_POSITION, position);

这在每个帧的渲染方法和在安装时调用一次的设置视图方法中指定。

这里有各种其他照明细节,在安装过程中会调用一次:

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
CGFloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
CGFloat diffuseLight[] = { 1.0f, 0.0f, 0.0, 1.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f };
glLightfv(GL_LIGHT0, GL_POSITION, position);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);

可以在此处找到该问题的视频:

http://youtu.be/dXm4wqzvO5c

谢谢,

[编辑]

更多信息法线也由以下代码提供,它们目前在一个大的法线数组或XYZ XYZ XYZ等...

// FACE SHADING
glColorPointer(4, GL_FLOAT, 0, colors);
glEnableClientState(GL_COLOR_ARRAY);
glNormalPointer(GL_FLOAT, 3, normals);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3*numOfFaces); 
glDisableClientState(GL_COLOR_ARRAY);

1 个答案:

答案 0 :(得分:1)

我现在感到非常愚蠢...我想,作为一名学生程序员的所有部分。我会给出一个答案,所以如果有其他人得到这个问题他们也可以解决它!错误只是一个错字:

glNormalPointer(GL_FLOAT, 3, normals);

应该已阅读

glNormalPointer(GL_FLOAT, 0, normals);

第二个参数是STRIDE,仅当数组包含其他值时才使用垂直坐标/法线/纹理坐标。由于我的是单个阵列,因此值之间的步幅应为0.