2017-09-16 84 views
2

我希望我的2D精靈在旋轉的同時總是面對我的光標。光標方向openGL C++

我正在使用高興,SDL2 & glm數學。

我試過的「原始」方式是計算我的Front和我期望的對象的LookAt矢量之間的角度,並將角度放入一個glm::rotate矩陣中。 這並沒有解決一些奇怪的原因。 另一種方法是在一個quat中完成,然後將quat應用到我的模型矩陣中,這也沒有幫助。

我的對象以其原點(0,0,0)的中心呈現 - 因此不需要爲旋轉進行翻譯。

我畫了2個三角形來製作一個矩形,我在其上加載我的紋理。

我的模型矩陣的樣子,在理論:

model = rotate * scale; 

我然後將其插入着色器(其中位置是我的vec3頂點)

position = projection * view * model * vec4(Position, 1.0f); 

第一個奇怪的是,如果我硬編碼90.0f作爲角度到glm::rotate,我的對象實際上是順時針旋轉大約120°。 如果我插入80°,它實際上順時針旋轉約250°。 如果我插入45°,則它是完美的45°順時針旋轉。 所有的旋轉是繞Z軸,如:

model = glm::rotate(model, 90.0f, glm::vec3(0.0f,0.0f,1.0f); 

如果我使用一個四元數來模擬的方向,它給了我角弧度0,2之間& 0,9和我的對象似乎只對旋轉在0.0°&之間順時針旋轉45°,無論我放在哪裏我的光標。

如果我計算角度順便說一句。我的兩個向量(ObjectLookAt & MousePosition)並存儲它們我也得到了相當正確的角度,但glm :: rotate函數不能像我期望的那樣工作。

float angle = static_cast<float>(SDL_GetTicks()/1000); 

哪一個開始,它實際上旋轉更加怪異:

最後,如果我只是作爲代碼的角度。 我期望它開始以1°的速度(因爲它以1秒開始),然後圍繞z軸旋轉一整圈直到360秒結束。然而,它在大約6秒內完全旋轉360°。所以在角度上添加了「1」,並且插入glm::rotate的程度代表60°?

這是我的邏輯中的缺陷嗎?如果它是在x-y平面上繪製的,我是否不會圍繞z軸旋轉一個精靈? 爲了在這裏安全,我也試過了x軸,但那並不奏效。 我真的堅持在這裏,我(想我)得到它應該如何在理論工作,特別是因爲這一切發生在「2D」,但我不能得到它的工作..

回答

2

第一個奇怪的是,如果我將90.0f硬編碼爲glm :: rotate的角度,我的對象實際上會順時針旋轉大約120°。如果我插入80°,它實際上順時針旋轉約250°。如果我插入45°,則順時針旋轉45°。

這是因爲函數glm::rotate期望以弧度爲單位的角度(因爲GLM版本0.9.6)。

適應這樣的代碼:

model = glm::rotate(model, glm::radians(angel_degrees), glm::vec3(0.0f,0.0f,1.0f); 

還看到:

+1

非常感謝你,特別是對快速回復!這樣的工作方式更好,奇怪,它在[文檔]中說過(https://glm.g-truc.net/0.9.3/api/a00147.html#gaacb9cbe8f93a8fef9dc3e25559df19c0)角度應該用度數表示然後.. 其餘的應該是我現在正在做我的數學.. – Schloemmel