2011-11-21 168 views
2

我正在與源sdk(它使用C++)工作,我想旋轉一個實體的角度,所以它看起來在另一個實體。3D矢量(X,Y,Z)看矢量

一個實體可以看作是一個遊戲對象或類似物,並且在世界以及角度(矢量)中都有一個位置(矢量)。

我可以使用SetAbsAngles旋轉實體,它使用QAngle(基本矢量)作爲參數。

Explanation of what I want and have

+0

如果您想要不知道源SDK的人的答案,您可能想要解釋SetAbsAngles實際上在做什麼,以及SDK提供的其他方式來改變實體在功能和參數方面的方向。 – sellibitze

回答

3

下面是一些僞代碼:

vec3 p = entity2->getPosition(); 
vec3 r = entity1->getPosition(); 
float xdistance = p[0] - r[0]; 
float ydistance = p[1] - r[1]; 
float zdistance = p[2] - r[2]; 
float xzdistance = sqrt(xdistance * xdistance + zdistance * zdistance); 
entitity1->setHeading(atan2(xdistance, zdistance)); // rotation around y 
entitity1->setPitch(-atan2(ydistance, xzdistance)); // rotation around x 
entitity1->setBank(0); // rotation around z 

的z旋轉設定爲0,因爲它不能被確定。如果你喜歡,你可以隨意設置。

這適用於z向前,y向上且x向右的座標系。如果您使用不同的系統,您可能需要調整一些標誌。

+0

什麼是setHeading,setPitch和setBank? 我似乎沒有在我的實體中使用這些方法。 – Dumpen

+0

Heading/Pitch/Bank是描述y/x/z旋轉的術語(按此順序)。如果我正確理解源sdk文檔,則標題對應於-Yaw,Pitch to Pitch和Bank to Roll。所以你將不得不使用像SetAbsAngles(QAngle(pitch,-heading,bank)); –