使用drawFrame线程打开GL计时

时间:2013-08-15 01:23:07

标签: android opengl-es 3d rotation translation

我有一个适用于相机和游戏对象的3D世界。当相机“渲染”时,它将矩阵定位在相机的位置。为此,我调用以下代码:

gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(position.getX(), position.getY(), position.getZ());

现在,当每个对象都被渲染时,我会为每个对象调用它。 (请注意,我正确地推送和弹出矩阵)

gl.glTranslatef(position.getX(), position.getY(), position.getZ());
gl.glMultMatrixf(rotationArray,0);

现在我的问题开始发挥作用,当我将模型带入世界时,我需要某些网格物体不在0,0,0点附近,而是在不同点附近。我有一个名为Mesh的对象,它有一个子网格的ArrayList。每个网格(和子网格)都有一个轴点位置。 (x,y和z浮点数)。

我在哪里翻译基础,所以我绕指定点转移?我尝试了各种各样的组合,没有任何作用!

示例:

gl.glTranslatef(position.getX(), position.getY(), position.getZ());                     
gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(pivotPoint.getX(),pivotPoint.getY(),pivotPoint.getZ()); 

我试过

gl.glTranslatef(pivotPoint.getX(),pivotPoint.getY(),pivotPoint.getZ());                     
gl.glMultMatrixf(rotationArray,0);
gl.glTranslatef(position.getX(), position.getY(), position.getZ());

1 个答案:

答案 0 :(得分:1)

这归结为绕任意点旋转。传统上,当您旋转对象时,通常会围绕对象的中心旋转它,但在这种情况下,您有一个单独的轴心点。

围绕任意点旋转对象的过程是:

  1. 翻译 - (RotationPoint)
  2. 旋转
  3. 翻译+(RotationPoint)