2013-05-17 227 views
0

我想在我的遊戲中進行一種魚眼剔除。因此,對於列出的每個對象進行繪製,我想檢查是否處於相機的黑暗中。 我這樣做:三維空間中兩個向量之間的角度

D3DXVECTOR3 cameraPos; 
D3DXVECTOR3 pos; 
D3DXVECTOR3 cameraVector;//where camera is looking(camera->eye() - camera->pos()) 
D3DXVECTOR3 direction = pos - cameraPos; 
normalize(&direction); 
normalize(&cameraVector); 
float dot = cameraVector.x * direction.x + cameraVector.y * direction.y + cameraVector.z * direction.z; 

//float cosvalue = cos(dot); // i was calculatin cos of cos :) 
float cosvalue = dot; 
float angle = acos (cosvalue) * 180.0f/PI; 

if(angle < 45.0f) draw(); 

但我得到奇怪的結果。例如(角度< 50.0f)隨處繪製,但沒有我想要的地方,因此魚眼是空的。 !(角度< 50.0f)畫出我想要的。但是,(角< 40)得出什麼:( ,如果是我的角度計算,或者是我不舒爾漂浮問題:(任何

+0

因爲看起來你需要大量的矢量計算,所以你可能需要使用像Boost這樣的庫。 –

+0

nvm我被推遲了。 – Machiaweliczny

+0

請注意atan2版本更精確http://www.mathworks.com/matlabcentral/answers/16243-angle-between-two-vectors-in-3d – mrgloom

回答

5
dot_product = a.x * b.x + a.y * b.y + a.z * b.z = a.len() * b.len * cos(angle) 

這樣的:?

cos(angle) = dot_product/(a.len * b.len) 

你的代碼做一件奇怪的事:

+0

是的,我知道。我的點等於cos,因爲矢量是歸一化的。 – Machiaweliczny

相關問題