現在、コードで何か奇妙なことが起こっています。私はこれをBlackBerryPlaybookで実行しており、OpenGLES1.1です。
編集4:質問を簡略化するために、投稿したものをすべて削除しました。
コードを取得して、2つの重なり合う三角形を描画するように簡略化しました。座標を含む配列と色を含む配列は次のとおりです。
GLfloat vertices[] =
{
// front
175.0f, 200.0f, -24.0f,
225.0f, 200.0f, -24.0f,
225.0f, 250.0f, -24.0f,
// back
200.0f, 200.0f, -25.0f,
250.0f, 200.0f, -25.0f,
250.0f, 250.0f, -25.0f
};
static const GLfloat colors[] =
{
/* front */ 1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,1.0f, //Red
/* back */ 0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f //Green
};
私の座標は、x方向が0から1024、y方向が0から600、z方向が0から-10000であることに注意してください。
これを反映したセットアップコードは次のとおりです。
glClearDepthf(1.0f);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glShadeModel(GL_SMOOTH);
glViewport(0, 0, surface_width, surface_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, surface_width, 0, surface_height, 0, 10000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
特定のマトリックスモードが選択されているときに使用される可能性を排除しようとしていたため、2か所で深度を有効にしています。
最後に、私のレンダリングコードを示します。
void render()
{
//Typical render pass
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, colors);
glDrawArrays(GL_TRIANGLES, 0 , 6);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
//Use utility code to update the screen
bbutil_swap();
}
問題は、私が何をしても、緑色の三角形が常に赤色の三角形の上に重なることです。どちらの方法でもz値を変更しても、完成した画像には影響しません。私はこれを理解することはできません。