我正在創建一個OpenGL ES 2.0應用程序。我希望實現觸摸控制,以便在屏幕上執行手勢(如滑動)時旋轉我的3D對象。如何從滑動手勢確定3D對象的旋轉角度?
我有旋轉相機和旋轉物體的功能。我的問題是我需要知道旋轉角度(在X和Y中)必須傳遞到旋轉函數中。
如果用戶在特定方向上執行滑動,我如何計算X和Y方向上的角度,以便將它們傳遞給旋轉函數?
我正在創建一個OpenGL ES 2.0應用程序。我希望實現觸摸控制,以便在屏幕上執行手勢(如滑動)時旋轉我的3D對象。如何從滑動手勢確定3D對象的旋轉角度?
我有旋轉相機和旋轉物體的功能。我的問題是我需要知道旋轉角度(在X和Y中)必須傳遞到旋轉函數中。
如果用戶在特定方向上執行滑動,我如何計算X和Y方向上的角度,以便將它們傳遞給旋轉函數?
有幾種方法可以處理將觸摸運動轉換爲三維對象旋轉的任務:設置軌跡球或使用縮放的像素位移映射到旋轉。
我做後者在this OpenGL ES 2.0 sample application,其中我執行一個立方體的旋轉響應手指在X和Y的位移。在這種情況下,我使用觸點座標差異直接映射到旋轉,使用代碼像下面這樣:
GLfloat totalRotation = sqrt(xRotation*xRotation + yRotation*yRotation);
CATransform3D temporaryMatrix = CATransform3DRotate(currentCalculatedMatrix, totalRotation * M_PI/180.0,
((xRotation/totalRotation) * currentCalculatedMatrix.m12 + (yRotation/totalRotation) * currentCalculatedMatrix.m11),
((xRotation/totalRotation) * currentCalculatedMatrix.m22 + (yRotation/totalRotation) * currentCalculatedMatrix.m21),
((xRotation/totalRotation) * currentCalculatedMatrix.m32 + (yRotation/totalRotation) * currentCalculatedMatrix.m31));
這大致把一個點在屏幕上移動的一個程度,這似乎也爲我的工作需要。您可以向上或向下縮放以調整旋轉的靈敏度。
我在這裏使用的CATransform3D通過輔助函數轉換爲OpenGL模型視圖矩陣,並以矩陣形式傳遞到我的着色器中。
軌跡球是處理這種旋轉的另一種方式,Bill Dudney在他的核心動畫示例here中提供了一個例子。您可以解除他的軌跡球實施,並在我的應用程序中執行相同的CATransform3D轉換,以從該代碼生成適當的模型視圖矩陣。
如果您閱讀向下箭頭上的工具提示,您可能會看到爲什麼有人投下它。這不是對你聲譽的反思,而是對你提出問題的研究質量和努力的反饋。 – Spacemancraig
哦!謝謝(你的)信息。我應該更清楚這個問題。無論如何,下面提供的答案幫助了我。我將確保從現在開始提供更具體的細節。 – Bharath
可能有點遲到你看到這個,但如果下面的答案幫助你點擊'接受'的答案。 – Spacemancraig