爲了旋轉/平移對象(大約只有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
我需要幫助理解爲什麼是不需要翻譯發生,究竟是什麼毛病轉換,或者是它,這是錯誤的算法。
萬向節鎖可以成爲一個問題嗎?
請不要問我執行/練習更簡單的例子,因爲我已經準備好了Renderer類用於關於全局z軸的旋轉/平移,並且這個新的任務我使用了相同的類,稍作修改在updateModel()
(請注意,該期望的旋轉僅約z軸和翻譯僅在xy平面)
[API 10-> 15]
的實際渲染器類有兩個對象:坦克炮塔(噴嘴)和坦克身體,而轉塔(噴嘴)具有不期望的向前平移,所述主體具有不期望的向後平移
法APK for平移/旋轉有關設備中心(這是很容易在opengles 2.0作出): http://www.pixdip.com/opengles/global.php
法APK for翻譯關於任意點/旋轉(已經沿+ Y不期望的翻譯): http://www.pixdip.com/opengles/local.php
法APK for平移/旋轉大約任意點,其中的UpdateModel()被調用只有4次: http://www.pixdip.com/opengles/limited.php 和所需的代碼(瓦特這應該是足夠的)在這裏:http://www.pixdip.com/opengles/code.php
對象的部件(噴嘴/炮塔,車身)當前正在圍繞自己的中心旋轉而不是物體的中心(這是_playerCentre),我稍後會對其進行修改。
我試圖證明邏輯http://www.pixdip.com/opengles/images.php
我不明白,爲什麼你有不受歡迎的翻譯?你的算法是否生成它們?他們來自哪裏?我建議你在出現不希望的翻譯之前先消除它。 – RaphMclee 2012-08-15 07:42:28
產生不需要的翻譯的代碼行不能被刪除,因爲它們是算法的一部分,我沒有任何其他選項。算法是否正確我仍然不確定,並且實現正在生成一個自動翻譯,我不知道如何刪除它,因爲我只有一個算法,我不能使用替代算法,請嘗試使用apk PLZ來理解它更清楚。 – GLES 2012-08-15 07:44:11
我可以看到你已經爲這個問題付出了很多努力,但我不得不說,我不能真正理解你在說什麼。我無法弄清楚你想在'images.php'頁面上說什麼,我下載了你的應用程序'local.php',但它似乎沒有做任何事情。我只看到兩個按鈕和一個紫色正方形,而當我觸摸按鈕時什麼都沒有發生。你不斷提及一個不受歡迎的翻譯,但不清楚它究竟是什麼或者不想要的。你可以嘗試鏈接單個圖像,並清楚地圈出並註釋問題是什麼? – Tim 2012-08-17 16:16:00