2013-02-13 4 views
0

JOGL에서 건물을 만들고 키보드 또는 마우스를 사용하여 카메라를 움직이기를 바라는 인스턴트 메신저는 카메라가 물체 주위를 돌고 확대/축소 할 수있는 한 정말 중요하지 않습니다. . 키보드/마우스를 사용하는 것이 어렵다면 응용 프로그램의 일부 버튼을 사용하는 것을 잊어 버리십시오. 위쪽, 아래쪽, 왼쪽 및 오른쪽 화살표와 확대/축소 버튼 (기본적으로 가장 쉬운 버튼)이 있습니다. 레고 (Lego)와 비슷한 무언가를 만들었지 만, 카메라를 움직일 수 없으면 매우 어렵다는 것을 증명합니다.JOGL - 카메라 이동

+1

무엇이 문제입니까? –

+0

몇 가지 코드를 보여 주시고 이미 카메라를 움직여 보셨습니까? –

+0

질문은, 누구든지 이미 그것을 할 수있는 것이 있습니까? 나는 그것을 할 수있는 방법을 절대 모르고있다. 화살표 키는 물체를 회전 시키지만, 내가 원하는 것은 아니다. – thrash

답변

7

"카메라"를 이동하려면 렌더링 기능을 시작할 때 glTranslate3f() 변환을 적용해야합니다. 카메라의 위치

cameraPos = <cx, cy, cz> 

을 할 경우 당신은

glTranslate3f(-cx, -cy, -cz); 

이 그 벡터에 의해 그려지는 모든 것을 상쇄 할 사용해야합니다.

키보드를 사용하여이를 수행하려면 KeyListener 구현을 사용하고 인터페이스에서 지정한 함수를 정의해야합니다.

public void keyPressed(KeyEvent ke){ // put something intelligent here... } 
public void keyReleased(KeyEvent ke){} 
public void keyTyped(KeyEvent ke){} 

이 구현 클래스를 GLJPanel (또는 사용중인 무엇이든)의 KeyListener로 등록하십시오. 그런 다음 keyPressed (...) 함수 내부에서 어떤 키가 눌러 졌는지 확인하고 카메라의 적절한 좌표를 증가시킵니다.

정말 멋지고 마우스를 둘러 볼 수있게하려면 MouseMotionListener를 만들고 등록하면 비슷한 효과를 얻을 수 있습니다. OpenGL 변환은이 유형의 마우스 동작 유형에 따라 달라질 수 있습니다. 주위를 둘러 볼 수있는 간단한 것을 원하면 x 및 y 방향으로 마우스 동작을 추적하고 오프셋 각도를 수정할 수있게 할 수 있습니다. x 방향으로 마우스를 움직이면 y 축이 회전합니다. y 방향으로의 이동은 x 축을 중심으로 회전합니다. OpenGL 호출과 마찬가지로 glTranslate3f()와 마찬가지로 glRotatef()를 사용하여 각 축을 회전 할 수 있습니다.

glRotatef(angleX, 1, 0, 0); // to rotate about the x-axis 
glRotatef(angleY, 0, 1, 0); // to rotate about the y-axis 

다시 말하면이 방법은 빠르고 쉬운 해결책입니다. 아름다운 것은 아니지만 효과가있을 것입니다. 약간 더 멋진 것을 구현하고 싶다면 임의의 축 회전 행렬을 계산할 수 있습니다. 당신은의, Y에 카메라가 보이는 곳의 X X의 "하는 gluLookAt (위치라는 함수, Y의 위치, Z의 위치를 ​​사용

1

http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/
(이 주제에 대한 많은 자원 중 하나) 카메라가 보이는 곳, 카메라가 보이는 곳의 z, 0, 1, 0); "

"0, 1, 0"부분은 팬을 사용하고 확대하는 것처럼 그대로 두십시오. 카메라 기울기에만 영향을줍니다.