2011-12-25 147 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