【问题标题】:Strange black pixels on model模型上有奇怪的黑色像素
【发布时间】:2009-10-16 23:45:17
【问题描述】:

我尝试用 197 个多边形绘制模型,但上面有奇怪的黑色像素:

alt text http://i.imagehost.org/0398/IMG_0172.png

当我在 iPhone 模拟器中运行代码时,它显示良好,没有那些黑色像素,但在设备上我遇到了这个问题。

我设定视角:

const GLfloat zNear = 0.01, zFar = 1000.0, fieldOfView = 45.0; 
GLfloat size; 
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION); 
size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0); 

CGRect rect = self.bounds; 
glFrustumf(-size, size, -size / (rect.size.width / rect.size.height), size / (rect.size.width / rect.size.height), zNear, zFar); 
glViewport(0, 0, rect.size.width, rect.size.height);  
glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); 
glClearColor(0.3f, 0.3f, 0.3f, 1.0f); 
glColor4f(0,0,0,0.5f);
glEnable(GL_SMOOTH);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glEnableClientState(GL_VERTEX_ARRAY);

并绘制(模型顶点、索引和法线存储在全局数组中。):

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

[EAGLContext setCurrentContext:context];

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);


glTranslatef(1.0, -9, -22);

glVertexPointer(3, GL_FLOAT, 0, vertices);

glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_FLOAT, 0, normals);

glDrawElements(GL_TRIANGLES, 3*192, GL_UNSIGNED_BYTE, icosahedronFaces);

glDisableClientState(GL_NORMAL_ARRAY);

glTranslatef(-1.0, 9, 22);

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];

【问题讨论】:

    标签: iphone opengl-es


    【解决方案1】:

    这可能是一个深度精度问题,其中背面的多边形正在刺穿。尝试在不剪裁场景的情况下尽可能增加 zNear 的值。

    【讨论】:

    • 好的,谢谢。我设置 const GLfloat zNear = 0.1, zFar = 30.0, fieldOfView = 45.0;现在一切都很好
    【解决方案2】:

    这似乎是一些法线不完全垂直于它们各自的表面的问题。

    在翻译之前尝试应用你的法线。

    【讨论】:

    • 我为每个顶点使用一个法线向量以获得平滑效果。我尝试对多边形使用 3 个法线向量(没有平滑)并具有相同的效果。如果我放置 glNormalPointer(GL_FLOAT, 0, normals);在 glTranslatef(1.0, -9, -22) 之前;它没有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多