2014-04-04 5 views
2

나는 작은 자동차 시뮬레이션을위한 기초로서 Opengl을 사용하고 있습니다.3D 오브젝트의 위치에 따라 회전 카메라

나는 모델 자동차를 가져 왔고 주위를 잘 돌아 다니며 카메라가 그것을 따라 간다. 불행하게도 나는 차가 돌아 왔을 때 카메라의 위치를 ​​움직일 수 없다. 그냥 그 자리에서 회전합니다.

예를 들어 자동차가 좌회전하면 카메라가 뒤따라 회전하지만 차 뒤쪽으로 직접 이동하지 않습니다.

나는이 질문을 herehere으로 보았지만 여전히 작동하지는 않습니다.

velocity.x = sin(rotX_rad); 
    velocity.z = cos(rotX_rad); 

    globalPos.x + velocity.x*delta; 
    globalPos.z + velocity.z*delta; 

    glTranslatef(globalPos.x,globalPos.y,globalPos.z); 
    glRotatef(rotX, 0.0, 1.0, 0.0); 

을 그리고 이것은 내가 바라보기 기능이 어떻게 현재 :

내가 차의 위치를 ​​계산하는 방법이있다 (그것은 단지 지금은 XZ 평면에 드라이브)

gluLookAt(camX+globalPos.x, 
       camY+globalPos.y, 
       camZ+globalPos.z, 
       lookX+globalPos.x+sin(rotX_rad), 
       lookY+globalPos.y+cos(rotX_rad), 
       lookZ+globalPos.z-cos(rotX_rad), 
       camNX, camNY, camNZ); 
을 (Y는 Z 위치)

enter image description here

:

I이 같을 카메라하고자 내가 뭘하고 있지 않다

....

camX + globalPos.x+ sin(rotX_rad)*(distFromCar), 
    camY, 
    camZ + globalPos.z- cos(rotX_rad)*(distFromCar), 

하지만 이상하게 동작합니다

내가 볼때, 그것은되어야 하는가?

+0

+1의 경우에는 작동하지 않습니다. :) – SAKrisT

답변

1

내 머리 속에서 의미가, 탄이 부여하지만 현실 :

확인하지 않을 수도, 그래서 우리는 위치의 경우 (2 요소 벡터로 차량의 위치와 속도를 나타낼 수 있습니다 그것은 는 점이고, 속도의 경우에는 참 벡터입니다.)

이제 우리는 카메라의 위치를 ​​계산하기 위해 속도 벡터의 음수를 취할 수 있습니다. 동일한 크기이지만 정확히 반대 방향의 벡터를 생성하는 벡터 음의 요소)를 선택하고 그 벡터를 자동차의 위치에 추가합니다.

예를 들어 자동차가 (1,1) 위치에 있고 속도 벡터가 (1,2)라고 가정 해보십시오. 음의 속도 벡터는 (-1, -2)이고 카메라의 위치는 (1,1) + (-1, -2)가 (0, -1)이됩니다. 카메라가 일정한 거리를 유지할 수 있도록 음의 속도 벡터를 정규화하고 싶을 것입니다. 그렇지 않으면 카메라가 더 멀리 떨어져있을수록 카메라가 더 빠르게 움직입니다. :)

이제 카메라의 위치를 ​​알아 냈으므로 gluLookAt : 당신이 볼 수 있듯이

gluLookAt(camPos.x,camPos.y,camPos.z,carPos.x,carPos.y,carPos.z,0,1,0); 

, 우리는 카메라의 위치를 ​​전달 (우리가 이전 단계에서 계산 된)과 차를보고 카메라를 말하고있다. 일부 값을 조정할 수도 있습니다 (예를 들어 카메라가 차 뒤에서 직접 움직이는 대신 카메라를 지상에서 몇 단위로 뜨거나 카메라가 자동차 위 몇 등 지점을 바라 볼 수있게하는 등)

어떻게 될지 알려주세요. 다시 말하지만, 이것은 내가 당신을 위해 일할 것이라고 생각한 것입니다. 제 수학이 옳다는 보장은 없습니다. :) 그러나 이것은 각도 등으로 어지럽히는 것보다 더 빠르고 이해하기 쉬워야합니다.한 가지 명심해야 할 것은 차가 완전히 정지되어있을 때 (속도 벡터 없음)

+0

굉장합니다. 나는 벡터를 부정했고 완벽하게 작동했다. 분명히 부정확하고 긍정적 인 가치로 이상하게 행동했습니다. 게시 해 주셔서 감사합니다. – Reanimation