2012-08-27 59 views
2

我在Android模拟器的问题,我渲染贴图立方体GLES 1和边界显示背朝:Android的OpenGL的深度测试失败

Problem image

我的深度测试设置:

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set color's clear-value to black 
    gl.glClearDepthf(1.0f);   // Set depth's clear-value to farthest 
    gl.glEnable(GL10.GL_DEPTH_TEST); // Enables depth-buffer for hidden surface removal 
    gl.glDepthFunc(GL10.GL_LEQUAL); // The type of depth testing to do 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); // nice perspective view 
    gl.glShadeModel(GL10.GL_SMOOTH); // Enable smooth shading of color 
    gl.glDisable(GL10.GL_DITHER);  // Disable dithering for better performance 

而我的观点:

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    if (height == 0) height = 1; // To prevent divide by zero 
    float aspect = (float)width/height; 

    // Set the viewport (display area) to cover the entire window 
    gl.glViewport(0, 0, width, height); 

    // Setup perspective projection, with aspect ratio matches viewport 
    gl.glMatrixMode(GL10.GL_PROJECTION); // Select projection matrix 
    gl.glLoadIdentity();     // Reset projection matrix 
    // Use perspective projection   
    GLU.gluPerspective(gl, 45, aspect, 0.1f, 1000.f); 

    gl.glMatrixMode(GL10.GL_MODELVIEW); // Select model-view matrix 
    gl.glLoadIdentity();     // Reset 

    // You OpenGL|ES display re-sizing code here 
    // ...... 
} 

回答

2

它看起来像您的深度缓冲区中可能没有足够的精度,因此面部有些重叠。

如果可能的话,我会建议减少深度范围,或者增加近平面(比如说1),减少远平面。飞机之间的距离越远,你现有的飞机精度就越低。