2

2DモードでGLSurfaceViewに2Dの正方形を描画しようとしています。オブジェクトを3Dモードで描画し、正方形が3D空間にあることをテストしました。次に、2D描画用にマトリックスを構成しようとしましたが、オブジェクトを描画しようとすると何も表示されません。

私のGLSurfaceViewインスタンスはGLSurfaceView.Rendererを実装しています。

セットアップを2つの機能に分割しました。

private void prepare3Ddrawing(GL10 gl)
{
    gl.glLoadIdentity();
    gl.glViewport(0, 0, getWidth(), getHeight());
    gl.glDisable(GL10.GL_DITHER);
    gl.glEnable(GL10.GL_DEPTH_TEST);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluPerspective(gl, 45.0f, (float)getWidth()/(float)getHeight(),0.1f,100.0f);    
}
private void prepare2Ddrawing(GL10 gl)
{
    gl.glDisable(GL10.GL_CULL_FACE);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight());
    gl.glScalef(1, -1, 1);
    gl.glTranslatef(0, -getHeight(), 0);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
}

そして、これが私の描画方法です...

public void onDrawFrame(GL10 gl)
{
    gl.glClear(GL10.GL_DEPTH_BUFFER_BIT|GL10.GL_COLOR_BUFFER_BIT);  
    prepare3Ddrawing(gl);

    camera.draw(gl);
    go2d.draw(gl);

    prepare2Ddrawing(gl);
    go2d.draw(gl);

}

そして最後に、私のgo2dオブジェクトは、GameObject2dと呼ばれる私が作成したオブジェクトのインスタンスです。描画方法はこんな感じです...

@Override
public void draw(GL10 gl)
{
    super.draw(gl);

    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_CW);
    //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, 6, 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);   
}

誰かアイデアはありますか?繰り返しになりますが、go2Dオブジェクトの3Dレンダリングバージョンは引き続き表示されますが、2Dバージョンは表示されません。

ありがとう。

4

1 に答える 1

1

データが含まれていないため、問題をデバッグするための2つの方法しか提案できません。

Step 1: try to force your 2d - perspective matrix and modelview matrix to be Identity Matrices. Then if you force your Square data vertices inside the clip space (e.g. x,y = +-1 or x,y= +-0.75, z=0, you should see a square appearing in the screen.

Step 2: now that the data model is correct, check what your model view and perspective matrices do: multiply each of your square vertices (x,y,z, w=1) with ModelView Matrix * CameraMatrix * PerspectiveMatrix. What do you get? Are the x,y,z much outside |w| ?

于 2012-11-24T15:26:20.870 に答える