【问题标题】:Unusual Lighting Effects - Random Polygons Coloured不寻常的照明效果 - 随机多边形着色
【发布时间】:2011-09-30 14:35:53
【问题描述】:

我正在创建一个用于 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);

【问题讨论】:

    标签: objective-c opengl-es lighting normals


    【解决方案1】:

    我现在觉得自己非常愚蠢……我想这都是学生程序员的一部分。我会留下一个答案,所以如果其他人遇到这个问题,他们也可以解决它!错误只是一个错字:

    glNormalPointer(GL_FLOAT, 3, normals);
    

    应该读过

    glNormalPointer(GL_FLOAT, 0, normals);
    

    第二个参数是 STRIDE,仅在数组包含其他值时使用,例如垂直坐标/法线/纹理坐标。因为我的是单个数组,所以值之间的步幅应该是 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多