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