2013-05-17 5 views
0

내 게임에서 물고기 눈 갈퀴를하고 싶습니다. 그래서 각 객체를 그리기 위해 내가 카메라의 절정에 있는지 확인하고 싶습니다. 내가 이런 식으로 수행3D 공간에서 두 벡터 사이의 각도

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

어쨌든 많은 벡터 계산이 필요해 보이므로 부스트와 같은 라이브러리를 사용하고 싶을 수 있습니다. –

+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