2011-03-06 93 views
1

我在使用Open GL ES的Android中工作。我一直在试图将我们的UI从Android Views移动到3D。我看到顶点布局存在一些奇怪的行为。Ortho OpenGL ES的投影问题

我有两个不同的四边形。一个是-0.5,-0.5 - > 0.5,0.5,另一个是0,0 - > 1,1,但当我渲染它们时,它们都显示在彼此之上。就好像它们都是0,0 - > 1,1(Ortho投影从0,0到1,1)。他们都通过相同的管道发送,所以我不知道这是如何发生的。

另一个奇怪的可能相关的问题。然后给出一个0.5的翻译,它完全移动到屏幕上,而不是像我所期望的那样,投影为0,0 - > 1,1。

下面是从Java的一些片断......

//定点类 公共静态最终诠释FIXED_POINT = 16;

public static final int ONE = (1 << FIXED_POINT); 
public static final int HALF = (ONE >> 1); 

//顶点设置 mNumVerts = 6;

ByteBuffer vbb = ByteBuffer.allocateDirect(mNumVerts * 2 * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    mVtxBuf = vbb.asIntBuffer(); 

    vbb = ByteBuffer.allocateDirect(mNumVerts * 2 * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    mTexBuf = vbb.asIntBuffer(); 

    mVtxBuf.put(-Fixed32.HALF); mVtxBuf.put(-Fixed32.HALF); mTexBuf.put(0); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put( Fixed32.HALF); mVtxBuf.put(-Fixed32.HALF); mTexBuf.put(Fixed32.ONE); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put( Fixed32.HALF); mVtxBuf.put( Fixed32.HALF); mTexBuf.put(Fixed32.ONE); mTexBuf.put(0); 

    mVtxBuf.put(-Fixed32.HALF); mVtxBuf.put(-Fixed32.HALF); mTexBuf.put(0); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put( Fixed32.HALF); mVtxBuf.put( Fixed32.HALF); mTexBuf.put(Fixed32.ONE); mTexBuf.put(0);   
    mVtxBuf.put(-Fixed32.HALF); mVtxBuf.put( Fixed32.HALF); mTexBuf.put(0); mTexBuf.put(0); 

    mVtxBuf.position(0);   
    mTexBuf.position(0); 

//和....

mVtxBuf.put(0); mVtxBuf.put(0); mTexBuf.put(0); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put(Fixed32.ONE); mVtxBuf.put(0); mTexBuf.put(Fixed32.ONE); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put(Fixed32.ONE); mVtxBuf.put(Fixed32.ONE); mTexBuf.put(Fixed32.ONE); mTexBuf.put(0); 

    mVtxBuf.put(0); mVtxBuf.put(0); mTexBuf.put(0); mTexBuf.put(Fixed32.ONE); 
    mVtxBuf.put(Fixed32.ONE); mVtxBuf.put(Fixed32.ONE); mTexBuf.put(Fixed32.ONE); mTexBuf.put(0);   
    mVtxBuf.put(0); mVtxBuf.put(Fixed32.ONE); mTexBuf.put(0); mTexBuf.put(0); 

    mVtxBuf.position(0);   
    mTexBuf.position(0); 

//投影设置

   gl.glMatrixMode(GL10.GL_PROJECTION); 
       gl.glLoadIdentity(); 
       gl.glOrthox(0, Fixed32.ONE, 0, Fixed32.ONE, -Fixed32.ONE, Fixed32.ONE); 

//渲染

   { 
        gl.glDisableClientState(GL10.GL_NORMAL_ARRAY); 

        gl.glScalef(thing.getXScale(), thing.getYScale(), thing.getZScale()); 
        gl.glTranslatef(thing.getX(), thing.getY(), thing.getZ()); 

        gl.glFrontFace(GL10.GL_CW); 
        gl.glVertexPointer(2, GL10.GL_FIXED, 0, mdl.getVtxBuf()); 
       } 


       gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, mdl.getTexBuf()); 
       // gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer); 
       gl.glDrawArrays(GL10.GL_TRIANGLES, 0, mdl.getVtxCount());  

回答

1

正如你们许多人可能已经猜到了,我一定错过了什么。这些顶点正在我的对象超类中进行编辑,以处理高宽比的旧问题。因此这些顶点并不是真的-.5,-5.5,5,它们都被重置为0,0-1,1。谢谢你的时间。