2011-03-10 60 views
1

嘿傢伙, 我正在嘗試實現FPS = Style相機。鼠標移動工作,但沒有觸摸鼠標。即使觸摸鼠標,相機也會在所有的程度上進行。基本上,如果沒有鼠標本身的移動,偏航和俯仰會從鼠標獲得錯誤的值。 這裏是用於Win32循環的代碼WM_MOUSEMOVE不能在Direct3D中使用FPS相機實現

case WM_MOUSEMOVE: 
     gCamera->Yaw() = (float)LOWORD(lparam); 
     gCamera->Pitch() = (float)HIWORD(lparam); 
     break; 

偏轉和俯仰方法基本上返回到數據成員MPITCH和mYaw的引用,並通過它們,我爲基向量的旋轉(右,上和看向量)

只是爲了澄清,我WM_MOUSEMOVE獲取輸入(我通過調試檢查),但它變得非常高,非常錯誤的值,因爲我甚至沒有移動鼠標,因爲相機是在每個方向旋轉就像它只是吃了一些火箭燃料。 P:我不得不調整值,因爲我使用Yaw和Pitch來創建矩陣,我必須使用浮點數。

欣賞幫助,球員

+0

看上面的一行,你可能忘記了* break *。 – 2011-03-10 08:03:40

+0

如果答案有幫助,請記住將upvote或標記爲選定的答案。謝謝! – DuckMaestro 2011-03-12 09:19:19

回答

0

請記住您的單位。 WM_MOUSEMOVE參數x值爲邏輯(屏幕像素)座標,但遊戲中的大多數旋轉值均以度或弧度表示。例如,如果鼠標位於< 400,300>但您的相機類預期爲弧度,那麼您將在轉換數學中將大量旋轉與其他一些(可能變化的)數相乘,甚至可能導致瘋狂的移動儘管你並沒有移動鼠標。在這種情況下,解決方案是使用您選擇的比例因子將您的邏輯單位轉換爲弧度或度數。

爲了應對進一步的評論:想一想 一種方法是問自己一個問題:運動的多少邏輯單元(通過鼠標),你要對應360度的旋轉?

舉例來說,如果你決定要在窗口的整個寬度鼠標移動到對應於360度,然後再數學關係式是

screenW * scaleFactor = 2 * PI

求解比例因子,然後將其應用到未來的鼠標使用值:

mouseX * scaleFactor = orientationInRadians

請記住,這種方法會鏈接的絕對鼠標位置的絕對相機方向(FO至少有一個自由度),所以你可能想要跟蹤鼠標位置的變化,而不是絕對的鼠標位置;然後計算適用於現有方向的方向(弧度)變化。可以使用相同的公式將邏輯座標的增量(變化量)轉換爲弧度。

+0

我沒有忘記休息。 Maestro的方式是合乎邏輯的,所以在這種情況下,0.2是一個很好的比例因子,可以轉換爲弧度(矩陣)? – DBoxer 2011-03-10 17:39:37

+0

我只是將Pitch和Yaw都作爲比例因子乘以0.0001f。我發現WM_MOUSEMOVE從屏幕的左上角取其原點。如果是這樣的話,那我該如何使用它來構建一個FPS相機?假設對於FPS相機,我應該讓原點位於屏幕的中心而不是邊緣。 – DBoxer 2011-03-10 18:32:06

+0

已經更新的答案。 – DuckMaestro 2011-03-10 23:01:01