2014-09-26 2 views
-3

저는 루아 GL 또는 OpenGL에서 어떻게 3D 세계를 회전 시킬지 궁금합니다. 내가 가지고있는 문제는 내가 프로그램에서 벽 근처에있을 때 somepoint에서 회전 할 때, 내가 벽에 또는 내가 만든 방의 바깥 쪽에서 끝난다는 것이다. 이것이 정확히 왜 그런지는 모르겠지만 내가보기에 많은 프로그래밍 코드는 C 또는 C++ 지향이기 때문에 더 어렵습니다. 나는 NEHE를 이미 체크 아웃했고 다시 C 또는 C++ 지향적인데 루아 지향적 인 것이 아닙니다.LuaGL 또는 OpenGL에서 3D 세계 회전하기

+2

이것은 일반적인 문제이며 루아에만 국한되지 않습니다. 아마 당신은 당신이 렌더링하고있는 것들과 카메라 위치를 포함하는 어떤 종류의 모델을 가지고 있습니다 - 당신은 그 모델에 기반한 조건에 기반하여 회전을 제한 할 필요가 있다고 생각합니다. – GHC

+0

답변 해 주셔서 감사합니다.하지만 먼저 다니엘의 수정 프로그램을 사용하려고합니다. 나는 이미 플레이어가 어디로 갈 수 있는지에 대한 제한을 하드 코딩하려했는데, 플레이어가 a 또는 d를 누르면 (2 축 이동을 제한하여) 2 단위 이동을 제한했습니다. 나는 그것을하기 위해 일종의 어리 석었고, 그것은 나에게 나무 열매를 몰고 있었다! 이 점을 명심 해 주셔서 감사합니다. – Brandon

답변

0

이 문제를 해결하려면 세계 공간 좌표에 관한 모든 것을 회전해야합니다. 개체의 원점을 회전하려는 지점과 동일하게 만들고 회전 한 다음 변환해야합니다. 그것이 있어야하는 곳.

예를 들어 세계를 회전시키고 싶다면 그리는 각 개체의 세계 행렬이 항등 행렬과 동일한 지 확인해야합니다.

그래픽에서 우리는 scaleMatrix * rotationMatrix * translationMatrix의 원칙을 따른다.

다음은 객체의 그리기 방법이 어떻게 생겼는지에 대한 예입니다.

매트릭스를 처리 할 때 glm을 살펴보아야합니다. 훨씬 더 효과적이라고 생각했습니다.

glPushMatrix(); 
glLoadIdentity(); 
glScale(); 
glRotate(); 
glTranslate(); 
glPopMatrix)(); 
+0

답변 해 주셔서 감사합니다. 이제 자습서를 가리 키거나 규모, 회전 및 변환에 액세스하는 방법으로 샘플 코드 (선호하는 언어 또는 p 코드)를 제공 할 수있는 방법이 있습니까? '세계'행렬과 별도의 행렬? 이것은 내가 혼란스러워하는 곳입니다. 내 코드에서는 "gl.Rotate blah blah blah, gl.Rotate blah blah blah, gl."(위치 [1], 위치 [2], 위치 [3])을 사용합니다. position [i]는 현재 뷰의 위치이거나, 현재 'world'뷰가 그려져있는 것 같아요. 그래픽 프로그래밍에 대한 멍청한 생각입니다 : ( – Brandon

+0

'gl. * '메소드를 사용하는 경우, 모든 것이 어디에 있는지를 이미 알고 있어야합니다. 일반적으로 무엇이든 그리기 전에 단위 행렬을로드 한 다음 행렬을 원하는 위치로 이동합니다. 단위 행렬을로드 한 다음 회전하여 변환 할 수 있어야합니다. – Daniel

+0

두려움 나는 지금 더 많이 잃어 버렸습니다. 내가 가진 모든 문제는 내가 카메라에서 현재 위치를 저장하고있는 '위치'라는 변수를 만들었다는 것입니다. 아래 코드는 제가 가지고있는 코드입니다. 보기 렌더링. – Brandon

관련 문제