2010-11-27 5 views
2

이것은 다소 모호한 질문이지만 나에게 곰이있다. 저는 Python/Pyglet과 OpenGL을 사용하여 게임을 작성하는 중입니다. 나는 현재 'world'라는 객체가 있기 때문에 다른 객체가있는 다른 객체들이 있기 때문에 구조화되어 있습니다. 예를 들어 게임의 한 부분은 다른 객체가있는 플랫폼이므로, 플랫폼을 기울이면 그 위에있는 객체를 기울여야합니다. 그래서 glRotate, glTranslate를 호출하는 platform.draw()를 실행 한 다음 modelview 행렬을 inbetween로 저장하는 각 객체를 그립니다. 이렇게하면 플랫폼의 모든 객체가 함께 이동합니다. 첫 번째 질문은 이것을 사물을 구성하는 합리적인 방법입니까, 아니면 다른 방법을 사용해야합니까?3D 게임의 구조를 구성하는 방법은 무엇입니까?

저는 카메라 클래스가 없지만 현재는 움직이는듯한 환상을주기 위해 전 세계 또는 일부를 번역 중입니다. 그러나 미래에 나는 개체 사이에서 시점을 전환 할 수 있기를 원합니다. 예를 들어 위를 내려다 보는 것에서 위에서 세계로 물체 중 하나에서 1 인칭보기로 전환 할 수 있습니다. 그래서 두 번째 질문은 미래에 달성 할 수 있도록 내 프로그램을 구성하는 가장 좋은 방법은 무엇입니까?

답변

1
아마

아니 전체 대답,하지만 난 완전한 하나가 전체 책을 걸릴 것 같아 ... 계층 구조에서 세계의 당신의 표현으로 뭐

는 일반적으로 알려진 것과 매우 유사하다 "씬 그래프 (scene-graph)", 많은 경우에 좋은 생각입니다. 정확하게 이것을 수행하는 라이브러리의 좋은 예가 Open Scene Graph입니다.

"세계 번역"에 대해 매번 모든 꼭지점을 변환하지 않는 한 완벽하게 괜찮습니다. 그것은 상대적인 관점의 문제 일뿐입니다. 실제로 카메라 매트릭스와 동일한 것은 무엇입니까? 변형을 세계에 카메라를 배치하거나 카메라 앞에서 세상을 움직이는 것으로 볼 수 있습니다.

+0

문제는 그 내가 world.object1.object2을 수행하는 데 내 세계에서 개체 중 하나와 함께 뭔가를 할 때. object3.do_something(), 약간 추한. 나는 또한 세계의 나머지 부분에 대한 포인터를 각 객체에 전달해야하는데, 이것이 실제로 큰 문제는 아닙니다. – eggbert

0

로직을 별도의 모듈/별도의 클래스/함수로 배치 할 수 있습니다. 제 2D-Game에서 특정 이벤트에 대한 메소드 등록 또는 스케줄링을 간단하게 해주는 GameLogic 클래스가 있습니다. (그리고 등록 취소 + 스케쥴 해제), 간단한 새 스타일 객체를 상태 기억 장치에 삽입하는 @state_wrapper 데코레이터를 만들었습니다 방법. 포인터를 모든 세계 객체에 전달할 필요가없는 것처럼하면, 이벤트 메소드 만이 객체에 액세스해야합니다.

하지만이 최선의 해결책이라고 주장 할 것이다)

관련 문제