2015-04-12 70 views
0

所以,這裏是我的3D立方體代碼:GL_DEPTH_TEST好好嘗試一下工作

Mesh cube = new Mesh(false, 8, 36, 
     new VertexAttribute(VertexAttribute.POSITION, 3, ShaderProgram.POSITION_ATTRIBUTE), 
     new VertexAttribute(VertexAttribute.COLOR_PACKED, 4, ShaderProgram.COLOR_ATTRIBUTE) 
    ); 

float x = -100; 
float y = -50; 
float z = 250; 

float w = 50; 
float h = 50; 
float l = 50; 

float r = Color.RED.toFloatBits(); 
float g = Color.GREEN.toFloatBits(); 
float b = Color.BLUE.toFloatBits(); 

float[] vertices = { 
    -w/2f + x, y, l/2f + z, // 0 
    r, 
    -w/2f + x, h + y, l/2f + z, // 1 
    r, 
    w/2f + x, h + y, l/2f + z, // 2 
    b, 
    w/2f + x, y, l/2f + z, // 3 
    b, 

    w/2f + x, y, -l/2f + z, // 4 
    g, 
    w/2f + x, y + h, -l/2f + z, // 5 
    g, 
    -w/2f + x, y + h, -l/2f + z, // 6 
    r, 
    -w/2f + x, y, -l/2f + z, // 7 
    r 
}; 

short[] indices = { 
    0, 1, 2, 2, 3, 0, 
    3, 2, 5, 5, 4, 3, 
    4, 5, 6, 6, 7, 4, 
    7, 6, 1, 1, 0, 7, 
    0, 3, 4, 4, 7, 0, 
    1, 6, 5, 5, 2, 1 
}; 

cube.setIndices(indices); 
cube.setVertices(vertices); 

「原型」: enter image description here

網類是LibGDX並且它是由我修改(不要太多)。所有的 首先,我打電話

GLES20.glEnable(GLES20.GL_DEPTH_TEST); 

在初始化(當然初始化上下文之後,)。

和渲染方法是這樣的:

GLES20.glClearColor(0f, 0f, 0f, 1f); 
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); 

shaderProgram.begin(); 
cube.render(shaderProgram, GLES20.GL_TRIANGLES, 0, 36); 
shaderProgram.end(); 

而最終的結果是: enter image description here

我也打了glDepthFunc,但我沒有得到期望的結果。

我在做什麼錯?

+0

你叫glEnable後得到一個錯誤? – TameHog

+0

@TameHog nope .. –

+0

znear和zfar的值是什麼? – DanP

回答

0

答案是,我忘了設置在創建的Open GL背景下深度緩存大小:

setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

此外,near值應> 0,所以我將它設置爲1。

0

原因只有兩個,

1)如果啓用了剔除功能,並且三角形的面法線方向相反,則不會渲染三角形。使用叉積計算三角形的面法線。 2)如果深度函數錯誤。

要面對計算/表面法線三角形的參考http://fullonsoftware.co.uk/snippets/content/Math_-_Calculating_Face_Normals.pdf

+0

另外,'near'應該> 0 –

相關問題