2011-07-07 94 views
0

我正在創建一個OpenGL ES 2.0應用程序。我希望實現觸摸控制,以便在屏幕上執行手勢(如滑動)時旋轉我的3D對象。如何從滑動手勢確定3D對象的旋轉角度?

我有旋轉相機和旋轉物體的功能。我的問題是我需要知道旋轉角度(在X和Y中)必須傳遞到旋轉函數中。

如果用戶在特定方向上執行滑動,我如何計算X和Y方向上的角度,以便將它們傳遞給旋轉函數?

+0

如果您閱讀向下箭頭上的工具提示,您可能會看到爲什麼有人投下它。這不是對你聲譽的反思,而是對你提出問題的研究質量和努力的反饋。 – Spacemancraig

+0

哦!謝謝(你的)信息。我應該更清楚這個問題。無論如何,下面提供的答案幫助了我。我將確保從現在開始提供更具體的細節。 – Bharath

+1

可能有點遲到你看到這個,但如果下面的答案幫助你點擊'接受'的答案。 – Spacemancraig

回答

2

有幾種方法可以處理將觸摸運動轉換爲三維對象旋轉的任務:設置軌跡球或使用縮放的像素位移映射到旋轉。

我做後者在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轉換,以從該代碼生成適當的模型視圖矩陣。