簡體   English   中英

在GLSurfaceView上繪制2D

[英]Drawing 2D on a GLSurfaceView

我試圖以2D模式在GLSurfaceView上繪制2D正方形。 我可以在3D模式下繪制對象,並測試正方形是否在3D空間中。 然后,我嘗試為2D繪圖配置矩陣,當我嘗試繪制對象時,什么也沒有出現。

我的GLSurfaceView實例實現了GLSurfaceView.Renderer。

我將設置分為兩個功能:

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版本。

謝謝。

由於您不包含任何數據,因此我只能提出兩種方法來調試問題。

第1步:嘗試將您的2D-透視矩陣和Modelview矩陣設置為恆等矩陣。 然后,如果將Square數據頂點強制置於剪輯空間內(例如x,y = + -1或x,y = + -0.75,z = 0),則應該在屏幕上看到一個正方形。

步驟2:既然數據模型正確,請檢查模型視圖和透視矩陣的作用:將每個正方形頂點(x,y,z,w = 1)乘以ModelView Matrix * CameraMatrix * PerspectiveMatrix。 你得到了什么? x,y,z在| w |之外嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM