2013-03-27 3 views
3

저는 C++을 배우고 2D 타일 매핑을 사용하고 있습니다.스프라이트 또는 움직이는 카메라의 가운데 맞추기? C++/OpenGL

나는이 tiling tutorial을 기반으로이 scrolling 포스트 here를 통해 읽고있다.

위의 튜토리얼과 Pearson, Computer Graphics with OpenGL 책의 도움을 받아 40x40 타일링 된 세계와 Sprite (타일)을 그리는 작은 프로그램을 작성했습니다.

그리기/렌더링 순서와 관련하여지도 (또는 세계) 자체는 그 뒤쪽 레이어이며 스프라이트는 가장 앞쪽 (최상위) 레이어입니다. 2 타일이 타일 및 사용자 정의 스프라이트 나 사각형보다 상호 작용하기 쉽기 때문에 그렇게하는 것이 좋은 방법이라고 가정합니다. 그 맞습니까?

난 당신이 keyboards arrow keys를 사용하여 viewport 내부의 map를 이동할 수있는 Keyhandling() 기능을 구현했습니다. 키를 누를 때 증가 또는 감소하는 변수는 offsetx, offsety입니다. 변수를 map 또는 sprite에 할당할지 여부에 따라 화면에서 어느 방향 으로든 더 많은 변수를 지정할 수 있습니다.

어느 쪽도 잘 작동하지 않으므로 스프라이트에 대해 양수 값을 사용하고지도에 대해 음수 값을 사용하여 변수를 모두 (맵 및 스프라이트)에 할당했습니다. 따라서 키를 누르면지도가 반대 방향으로 움직이는 동안 내 스프라이트는 한 방향으로 움직입니다.

내 문제는 스프라이트가 곧 화면을 떠날만큼 충분히 움직여서지도에 더 많은 부분을 가져다 줄만큼 충분하지 않다는 것입니다. (이 창에는 한 번에 약 1/8th 개의 타일 만 표시됩니다.)

나는 하루 종일 생각하고 있었고,이 문제를 해결할 수있는 효율적/효과적인 방법은 sprite을 화면 중앙에 고정시키고 키를 누를 때 map 주위를 돌아 다니며 ... 나는 비록 이것을 구현하는 방법을 모르겠습니다.

그게 좋은 방법일까요? 또는 뷰포트 또는 카메라를 움직일 것으로 예상됩니까?

답변

1

캐릭터가 움직일 때마다 스프라이트를 기준으로 모든 것을 이동하지 않으려합니다. 다른 스프라이트와 같이지도에 다른 것들이있는 복잡한 세계를 생각해보십시오. 지도를 고정 된 상태로 유지하고 각 스프라이트를지도에 상대적으로 이동하는 것이 가장 간단합니다 (이동 가능한 스프라이트 인 경우). 캐릭터가 세계를 돌아 다닐 때마다 전 세계를 움직이는 것은별로 의미가 없습니다.

캐릭터를 중심으로 항상 세계를 멋지게 표현하려면 완벽하게 좋습니다. 가장 좋은 방법은 카메라를 움직이는 것입니다. 또한 카메라를 확대/축소하고 카메라를 회전 시키면 전 세계의 모든 물체를 추적하는 번거 로움이 없습니다.

단어 "뷰포트"사용에주의하십시오. 그것은 OpenGL에서 매우 특정한 것을 의미합니다. (즉, glViewport 함수를보십시오). 책에서 다르게 사용한다면 괜찮습니다. 나는 이것이 당신이 의미하는 바가 100 % 명확하지 않기 때문에 이것을 지적하고 있습니다.