2011-03-06 54 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。謝謝你的時間。