为了旋转/翻译对象(只有Z轴,且只能在XY平面平移旋转)不只是WRT全球中心(装置中心),而且WRT其他任意点,我创建了一个算法,这是正确的(因为所有高级我曾与讨论程序员认为这是正确的), 但它采取了大量的时间在执行删除不需要的翻译 (算法在8月4日创建,并于同日开始实施,从此代码已修订15次)。
下面是实现http://www.pixdip.com/opengles/transform.php#ALGO1
的代码,生产不需要翻译的线条都在里面:
private static void updateModel(int upDown, float xAngle, float yAngle, float zAngle) {
并列举如下:
Matrix.multiplyMV(GLES20Renderer._uBodyCentreMatrix, 0, GLES20Renderer._ModelMatrixBody, 0, GLES20Renderer._uBodyCentre, 0);
objX = GLES20Renderer._uBodyCentreMatrix[0];
objY = GLES20Renderer._uBodyCentreMatrix[1];
沿+ Y不需要翻译仍然存在,即使以下更改:
objY = _uBodyCentreMatrix[1] - _uBodyCentre[1];
zAngle = 0;
ds = 0;
该值-0.545867f
被添加到Y在每次调用协调onDrawFrame()
因为渲染器类的这些字段:
private static final float[] _uBodyCentre = new float[]{-0.019683f, -0.545867f, -0.000409f, 1.0f};
protected static float[] _uBodyCentreMatrix = new float[4];
在http://www.pixdip.com/opengles/transform.php#FIELDS
我需要帮助理解为什么是不需要翻译发生,究竟是什么毛病转换,或者是它,这是错误的算法。
万向锁可以是一个问题吗?
请不要问我执行/练习简单的例子,因为我已准备就绪,旋转/平移对全球z轴,而我到这个新任务的渲染器类,使用稍加修改的同一类updateModel()
(请注意,所需转动大约只有z轴,且只能在XY平面转换)
[API 10-> 15]
实际渲染器类有两个对象:罐炮塔(喷嘴)和罐身 ,而转塔(喷嘴)具有不期望的向前平移,所述主体具有不期望的向后平移
APK翻译/绕设备中心(这是很容易在opengles 2.0作出): http://www.pixdip.com/opengles/global.php
APK翻译/绕任意点(已沿+ Y不希望翻译): http://www.pixdip.com/opengles/local.php
APK翻译/绕任意点中的UpdateModel()被调用4次只: http://www.pixdip.com/opengles/limited.php和所需的代码(这应该是足够了)是在这里: HTTP:// www.pixdip.com/opengles/code.php
对象(喷嘴/转台,体)的部分目前绕自己的中心不物体的中心(这是_playerCentre),我将修改后。
我试图证明逻辑http://www.pixdip.com/opengles/images.php