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());