概要
立方体の側面のテクスチャのレンダリングに問題があります。立方体の上部と下部のテクスチャは正常にレンダリングされましたが、側面はレンダリングできません。
私が持っているもの
私は 48 要素でいっぱいのテクスチャ バッファを持っています (面ごとに 4*2 要素と 6 つの面は 48 です)。
立方体の形状は描画されていますが、側面はレンダリングされていません。
私が描いている画像は、立方体の上から見てわかるように、1 から 9 までの数字の単純な画像です。textureBuffer は何度も何度も同じパターンです...
texture[0] = 0;
texture[1] = 0;
texture[2] = 1;
texture[3] = 0;
texture[4] = 1;
texture[5] = 1;
texture[6] = 0;
texture[7] = 1;
texture[8] = 0;
texture[9] = 0;
texture[10] = 1;
texture[11] = 0;
texture[12] = 1;
texture[13] = 1;
texture[14] = 0;
texture[15] = 1;
texture[16] = 0f;
texture[17] = 0f;
texture[18] = 1f;
texture[19] = 0f;
texture[20] = 1f;
texture[21] = 1f;
texture[22] = 0f;
texture[23] = 1f;
これは単にテクスチャ バッファをロードして、完全なテクスチャをレンダリングします。
考えられる問題##
最初の 16 のテクスチャ座標のみが描画され、使用されているように見えます。これは、長方形の上面と底面のみがテクスチャ処理されているためです。私はそれをデバッグしましたが、 TextureBuffer を設定すると、サイズは 48 になります。
レンダリング コード
@Override
public void draw(GL10 gl)
{
super.draw(gl);
//gl.glColor4f(255, 0, 0, 150);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_ALPHA_TEST);
gl.glAlphaFunc(GL10.GL_GREATER, 0.0f);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2,GL10.GL_FLOAT,0,textureBuffer);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);
gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3,GL10.GL_FLOAT,0,vertexBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES,indexBuffer.capacity(),GL10.GL_UNSIGNED_SHORT,indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
gl.glDisable(GL10.GL_ALPHA_TEST);
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glColor4f(255, 255, 255, 255);
}
変数 textureBuffer の作成
入ってくるパラメータ変数 texture には 48 個の要素が含まれています
public void constructTextureBuffer(float[] texture)
{
ByteBuffer vbb = ByteBuffer.allocateDirect(texture.length*4);
vbb.order(ByteOrder.nativeOrder());
textureBuffer = vbb.asFloatBuffer();
textureBuffer.put(texture);
textureBuffer.position(0);
}
vertexBuffer は正しくセットアップされ、インデックス バッファーを使用してキューブをレンダリングします。立方体の側面がレンダリングされない理由を知っていますか?
新着!!
手でシェイプを作成しようとしましたが、テクスチャ バッファで同じ状況に陥っています。2 つの顔をレンダリングできますが、3 番目の顔はレンダリングできません! 8 を超えるテクスチャ頂点は機能しないようです。
この写真は私の新しい形を示しています。水平方向の拡張に注意してください。それらのテクスチャ座標に何をしても、そのテクスチャは変わりません。これは、ランダム オブジェクトの 3 番目の面でもあります。