2011-12-25 177 views
2

我試圖設置渲染器,以便無論設備如何,視圖都是一個簡單的2D場,屏幕頂部爲1.0f,底部爲-1.0f。我似乎無法完全理解,我一直在onSurfaceChanged()方法中使用下面的方法,並使用gluPerspective中的參數來實現期望的效果,但似乎無法做到完美。當然,還有另外一種方法可以實現我的目標。我也一直在玩所繪製的網格物體的Z值,以試圖讓它們匹配。爲2D設置OpenGL ES渲染器?

再次我試圖設置它,以便屏幕定義在-1.0f到1.0的範圍內,這樣如果你繪製了一個等於2.0f的邊的正方形,它將填充整個屏幕而不管方面比。我需要改變做什麼? (包括我應該爲網格頂點的Z尺寸使用的值)

(不要被gluperspective奇怪的參數(),我一直在擺弄,看看會發生什麼。驚慌)

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
     if(height == 0) {      //Prevent A Divide By Zero By 
      height = 1;       //Making Height Equal One 
     } 

     gl.glViewport(0, 0, width, height); 
     gl.glMatrixMode(GL10.GL_PROJECTION); 
     gl.glLoadIdentity(); 
     GLU.gluPerspective(gl, 90.0f, (float) width/(float) height, 
        0.0000001f, 100.0f); 
     gl.glMatrixMode(GL10.GL_MODELVIEW); 
     gl.glLoadIdentity(); 
    } 

回答

2

生成正交矩陣,而不是嘗試:

Matrix.orthoM(projectionMatrix,0,-yourdisplayWidth/2,+yourdisplayWidth/2,-yourdisplayHeight/2,+yourdisplayHeight/2,0f,2f); 

因此,您可以將您的圖像四邊形放置在距相機1f的距離處。您還必須調整四邊形的大小,以像素爲單位。這樣你可以呈現pixelperfect。另外:https://github.com/Chrise55/Llama3D