介紹: 我開發在OpenGL一個小的塔防遊戲,目前我只是絕望有點問題....調整glRotate,使用點積
我想從塔樓到彈瞄準頭部朝向單位。所以我的問題更多是一個數學上的問題,但它屬於opengl :)
我有以下想法;我可以使用點積來獲得繞x軸旋轉的角度以獲取頭部,這取決於剛直線向下或與地面平齊的距離,然後繞y軸旋轉額外的角度以使箭頭處於每次調整到它所瞄準的單位。
我對繞X軸旋轉的角度碼(ⅰ稱之爲m_fYNeigung由於通過繞x軸旋轉頭的高度改變(Y))是這樣的:
plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_fYNeigung =
RADIANS_TO_DEGREES (acos ((float)
(
(faTowerPosition[0]) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[0]) +
(faTowerPosition[1] - 1) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[1]) +
(faTowerPosition[2]) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[2])
)
/
(
fabs (faTowerPosition[0]) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[0]) +
fabs (faTowerPosition[1] - 1) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[1]) +
fabs (faTowerPosition[2]) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[2])
)
));
其中faTowerPosition是從塔頂指向下的第一個向量(箭頭也從faTowerPosition [X/Y/Z]開始),點積的第二個向量是m_faProDirectionVector,它是一個歸一化方向向量,描述從塔的箭頭到單位。
的OpenGL繪圖部分看起來就像這樣簡單:
for (sizeJ = 0; sizeJ < localTowerArray[sizeI].m_byteProjectilAmount; sizeJ++)
{
if (localTowerArray[sizeI].Projektils[sizeJ].m_bOnFlight == true)
{
glPushMatrix();
glTranslatef (localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[0], localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[1], localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[2]);
//glRotatef (360.0f - localTowerArray[sizeI].Projektils[sizeJ].m_fXNeigung, 0, 1, 0);
glRotatef (localTowerArray[sizeI].Projektils[sizeJ].m_fYNeigung, 1, 0, 0);
DrawWaveFrontObject (m_pArrowProjektilObject);
glPopMatrix();
}
}
不理會我做的角度計算,我只是做它用箭頭的作用做實驗,我只注意到看起來箭頭的行爲根據(我得說:可建立的地圖由x:-3.4到3.4和z從4到-4縮放)的不同取決於行爲,塔的構建在-x/z,-z/x,z/x,-z/-x所有這些情況我都是不同的,至少取決於單位是在塔的左側還是右側,演技也不同....所以我忘記了通過這種方式使用點產品提醒?
你的代碼有太多錯誤,很難回答這個問題。爲什麼使用size作爲索引的前綴?德國人的名字是什麼?爲什麼有這麼多重複的代碼?你爲什麼不使用結構來得分?最重要的是,如果你問數學問題,爲什麼還要發佈你的代碼?無論如何。檢查了這一點:http://stackoverflow.com/questions/11008303/lookat-implementation-misbehaviors。大小前綴 – 2013-05-02 19:48:50
,因爲它們是size_t類型。德文名字「s」......唯一的德文名字是var「neigung」。我解釋了它。它的天使和neigung意味着像音高。即時通訊不知道你的意思是重複的代碼....我只是這樣寫了它,以保持點積的形式,它更容易得到即將做的事情....你是什麼意思與結構的點?我張貼我的代碼來解釋我的問題,提到一個問題,因爲我不知道什麼導致我的問題。至少...我發佈的鏈接絕對沒有與我的問題無關,但無論如何感謝:) – dhein 2013-05-02 20:07:46
之前downvoting,也許告訴我什麼「這麼多」是錯誤的我的代碼?它自己運行的代碼沒有任何問題....它只是點積的工作。爲什麼它不應該做它的行爲?! – dhein 2013-05-03 03:43:12