2014-04-18 3 views
2

처리 2+에서 자체 축을 중심으로 이동하고 회전 할 수있는 카메라를 만들려면 어떻게해야합니까?카메라 절두체()와 원근감() 회전 처리

나는 내가 세계 공간에서 이동 및 회전의 어떤 종류를 가질 수 카메라가 :

frustum(-10,10,-10,10,10,2000); 
translate(camX,camY,camZ);//I move around by adding to these values when a button is pressed 
rotate(angleX,1,0,0);//same here... 
rotate(angleY,0,1,0); 
rotate(angleZ,0,0,1); 

니어이의 문제는 회전이 내가 얻을 것을 의미 장면의 중심이다 장면의 중심 좌표에서 멀리 떨어지면 아주 이상한 회전. 왜 내가 회전하기 전에 번역을했을 때 그 일이 일어 났습니까?

+0

3D에서 동작 및 회전 원리를 배우려고합니까 아니면 다른 용도로 구현하려고합니까? 구현을 위해 PeasyCam for Processing을 살펴보십시오. 또한 학습을 ​​위해 소스 코드를 확인할 수 있습니다. –

+0

음, 3 차원 카메라 이동의 기본 사항을 알고 싶습니다. 비록 내가 웹에서 본 것만 큼 나는 그것을 완전히 이해하지 못한다. –

+0

3 차원 공간에서의 번역 및 움직이는 물체에 대한 이해가이 예제에서 예상대로 작동하지 않고 왜 더 잘 이해할 수 있는지 알고 싶습니다. –

답변

2

호르헤 로드리게스가 만든 This Youtube playlist을 볼 수있는 니콜라스 카를로와 그의 제안 덕분에 처음으로 거의 옳은 것을 고칠 수있었습니다.

내가해야했던 것은 내가 얻은 각도에서 포워드 벡터를 얻기 위해 간단한 삼각 함수 계산을 한 다음 카메라의 centerX, centerY, centerZ 값의 카메라 위치를 추가하는 것입니다.);

Ex. 여기서 camPos는 현재 위치 3D-Vector이고 vecForward는 내가 필요한 계산 된 3D 앞으로 벡터입니다.

vecForward.x = cos(yaw)*cos(pitch); 
vecForward.y = sin(pitch); 
vecForward.z = sin(yaw)*cos(pitch); 

camera(camPos.x,camPos.y,camPos.z, camPos.x+vecForward.x,camPos.y+vecForward.y,camPos.z+vecForward.z, 0,1,0); 

일부 사용자는 모르는 경우 피치가 상하 각도이고 요우가 카메라의 좌우 각도입니다.

마지막으로 여기에서, 저는 모든 비디오가 다른 문제에 대해 한 번에 가장 중요하고 자주 사용되는 수학적 해결책 중 적어도 하나를 설명하고 나서는 것을 설명하기 때문에 Carlo가 제안한로드 리 게스의 "게임 개발자를위한 수학" 결국 예제.