丫丫呸。。。搞了大半天。。。唉,基础知识还是不牢固啊。。初始化: man0 = loadTerrist(); man0.scale(0.5f, 0.5f, 0.5f); world.addChild(man0); man1 = (Group)man0.duplicate(); man1 = loadTerrist(); man1.scale(0.5f, 0.5f, 0.5f); world.addChild (man1); 第一种效果:man1 绕着 man0 转,man0静止不动, 但man1并不是时刻朝向man0; translateMan1.setIdentity (); translateMan1.postTranslate (radious, 0.0f, 0.0f); rotateMan1.setIdentity (); rotateMan1.postRotate (angleY_Man1, 0.0f, 1.0f, 0.0f); angleY_Man1 += 5.0f; if(angleY_Man1 >= 360.0f) ...{ angleY_Man1 -= 360.0f; } resultMan1.setIdentity (); resultMan1.postMultiply (rotateMan1); resultMan1.postMultiply (translateMan1); man1.setTransform (resultMan1);这就可以实现了 第二种:在第一种的基础上,实现man1绕着man0的同时,man1时刻朝向man0这里用到了我修改过的SE网站上的lookAt方法 translateMan1.setIdentity (); translateMan1.postTranslate (radious, 0.0f, 0.0f); rotateMan1.setIdentity (); rotateMan1.postRotate (angleY_Man1, 0.0f, 1.0f, 0.0f); angleY_Man1 += 5.0f; if(angleY_Man1 >= 360.0f) ...{ angleY_Man1 -= 360.0f; } resultMan1.setIdentity (); resultMan1.postMultiply (rotateMan1); resultMan1.postMultiply (translateMan1); man1.setTransform (resultMan1); float[] posMan0 = new float[3]; float[] posMan1 = new float[3]; Transform tTemp = new Transform(); man1.getTransform(tTemp); man0.getTranslation(posMan0); man1.getTranslation(posMan1); float[] matrix = new float[16]; tTemp.get(matrix); posMan1[0] = matrix[3]; posMan1[1] = matrix[7]; posMan1[2] = matrix[11]; lookAt(posMan0[0], posMan0[1], posMan0[2], posMan1[0], posMan1[1], posMan1[2], 0, 1, 0, tTemp); man1.setTransform(tTemp); man1.getTranslation(posMan0); man1.translate(-posMan0[0], -posMan0[1], -posMan0[2]); man1.translate(posMan1[0], posMan1[1], posMan1[2]); /** *//** * * To set the camera look-at the object * The same as gluLookAt * @param a_posX The object's X Position * @param a_posY The object's Y Position * @param a_posZ The object's Z Position * @param a_camX The camera's X Position * @param a_camY The camera's Y Position * @param a_camZ The camera's Z Position * @param a_upX The upper X Position * @param a_upY The upper Y direction * @param a_upZ The upper Z direction * @param trans The camera's transform */ public void lookAt (float a_posX, float a_posY, float a_posZ, float a_camX, float a_camY, float a_camZ, float a_upX, float a_upY, float a_upZ, Transform trans) ...{ float[] look = new float[3]; look[0] = a_camX - a_posX; look[1] = a_camY - a_posY; look[2] = a_camZ - a_posZ; float len = (float)Math.sqrt (look[0]*look[0] + look[1]*look[1] + look[2]*look[2]); if(len != 0) ...{ len = 1/len; } look[0] *= len; look[1] *= len; look[2] *= len; //cross prodect to get the side vector float sideX = look[1]*a_upZ - look[2]*a_upY; float sideY = look[2]*a_upX - look[0]*a_upZ; float sideZ = look[0]*a_upY - look[1]*a_upX; float[] sm_mtx = new float[16]; len = (float) Math.sqrt (sideX*sideX + sideY*sideY + sideZ*sideZ); if(len != 0) ...{ len = 1/len; } sideX *= len; sideY *= len; sideZ *= len; //make up vector perpendicular正交 //一般地,a_upX = 0, a_upY = 1, a_upZ = 0, 所以无需单位话,否则,计算完毕后还要进行单位化处理 a_upX = sideY*look[2] - sideZ*look[1]; a_upY = sideZ*look[0] - sideX*look[2]; a_upZ = sideX*look[1] - sideY*look[0]; sm_mtx[0] = sideX; sm_mtx[1] = a_upX; sm_mtx[2] = -look[0]; sm_mtx[3] = a_posX; sm_mtx[4] = sideY; sm_mtx[5] = a_upY; sm_mtx[6] = -look[1]; sm_mtx[7] = a_posY; sm_mtx[8] = sideZ; sm_mtx[9] = a_upZ; sm_mtx[10] = -look[2]; sm_mtx[11] = a_posZ; sm_mtx[12] = 0.0f; sm_mtx[13] = 0.0f; sm_mtx[14] = 0.0f; sm_mtx[15] = 1.0f; trans.set (sm_mtx); } 第三种:准备找到一个数学方法,通过矩阵运算,来达到效果。。