Java 相对于原点移动网格
Noobie:我可以构建和绘制网格(从STL文件加载),适当缩放并在屏幕上居中显示网格,但我似乎无法相对于原点移动网格。通常一个网格的坐标,比如说,都在+ve八分之一,所以我想移动它,使它的中心在原点上,然后我可以旋转它 我做错了,因为每当我移动网格时,原点都会随之移动。谁能拯救我的大脑,告诉我我做错了什么Java 相对于原点移动网格,java,android,opengl-es,3d,Java,Android,Opengl Es,3d,Noobie:我可以构建和绘制网格(从STL文件加载),适当缩放并在屏幕上居中显示网格,但我似乎无法相对于原点移动网格。通常一个网格的坐标,比如说,都在+ve八分之一,所以我想移动它,使它的中心在原点上,然后我可以旋转它 我做错了,因为每当我移动网格时,原点都会随之移动。谁能拯救我的大脑,告诉我我做错了什么 public void onSurfaceChanged(GL10 gl, int w, int h) { gl.glViewport(0, 0, w, h); gl.g
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45f, (float)w / (float)h, 0.1f, 5f * fMesh_Z_Extent;
gl.glTranslatef(0, 0, 0 - (2.5f * fMesh_Z_Extent));
float f1, f2, f3;
// set f1, f2, f3 to move centre of model to sit on the origin
// this works perfectly, but the origin has moved with the mesh! Grrrr.
gl.glTranslatef(f1, f2, f3);
gl.glMatrixMode(GL10.GL_MODELVIEW); //Select The Modelview Matrix
gl.glLoadIdentity();
}
public void onDrawFrame(GL10 gl) {
gl.glClearColor(0f, 0f, 0f, 1f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// initialise mesh here
gl.glColor4f(8f, 255f, 128f, 1f);
gl.glDrawElements(GL10.GL_TRIANGLES, Global.indices.length,
GL10.GL_UNSIGNED_SHORT, Global.indexBuffer);
gl.glRotatef(3.0f, 0.0f, 1.0f, 0.0f);
// Disable the vertices buffer.
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
你只需要按相反的顺序旋转和平移。OpenGL中的矩阵乘法的工作原理与我们的直觉相反。如果要将对象移动到原点,然后旋转它,需要先进行glRotate,然后进行glTranslate-是的。。。威德-哈 我会把glTranslate放到onDrawFrame中,然后每一帧都做一次 编辑:啊。。。你想让它显示在原点的拐角处,但绕65,65,65旋转吗?然后你需要平移它-65,旋转,然后平移65,把它拿回来。这将使旋转中心围绕对象的中心旋转
在这些调用周围也应该有一个glPushMatrix/glPopMatrix。原点移动是什么意思?原点(0,0,0)只是空间中一个永远不会移动的点。你的意思是你称之为原点的网格的某个部分吗?对不起,我需要更好地描述它。。。网格或多或少是一个立方体,从0,0,0到大约130130(因此网格在一个角接触原点)。网格在屏幕上看起来完全居中,但glRrotatef使其在接触原点的角上旋转,而不是在网格的质量中心(约65,65,65)。天哪。赞美主。不管怎样,还是要赞美iforce2d。谢谢你。我曾尝试过平移/旋转/向后平移,但仍然失败。。。事实上,我一直在做translate/drawerelements/rotate/translateback。只需在旋转前后立即放置平移,即可完全按照预期工作。我再次感谢你。重新推/弹出,在一次只显示一个网格的情况下仍然需要这样做吗?如果没有推/弹出,在此之后绘制的所有内容也将围绕65,65,65旋转。你可能正在加载身份矩阵或在某个地方设置视图,但它不在你发布的代码中,所以我只是想确认一下。你是对的,我现在不打算在视图中放置任何其他内容,但谁知道呢。现在就做,下次我就不必再依赖你的仁慈了:非常感谢你的帮助。