我使用Open GL ES在Android上工作。我一直在尝试将我们的UI从Android视图移动到3D。我看到了顶点放置的奇怪行为。
我有两种不同的四边形。一个是-0.5,-0.5 - > 0.5,0.5,另一个是0,0 - > 1,1但是当我渲染它们时,它们都出现在彼此之上。好像它们都是0,0 - > 1,1(正交投影设置从0,0到1,1)。它们都是通过相同的管道发送的,所以我不确定这是怎么发生的。
另一个奇怪且可能相关的问题。给予其中一个四边形的0.5的平移将其完全移动到整个屏幕上,而不是像我预期的那样将一半移动到0,0 - > 1,1。
以下是Java的一些片段......
//固定点类 public static final int 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() );
答案 0 :(得分:1)
你们许多人可能已经猜到了,我一定错过了什么。顶点在我的对象超类中以每帧为基础进行编辑,以处理纵横比的旧问题。因此顶点不是真正的-.5, - .5 - .5,.5它们都被重置为0,0-1,1。谢谢您的时间。