문제

저는 게임 제작(그리고 일반적으로 OpenGL 작업)이 처음입니다.2D 게임을 만들려고 하는데 충돌 감지에 대해 알아보려고 할 때 걸림돌이 되는 지점을 발견했습니다.

예를 들어 현재 행렬을 변환하고 회전하고 다시 변환한 다음 점을 그립니다.내가 그렸던 다른 것과 관련하여 그 점이 어디에 있는지 어떻게 알 수 있나요?

현재 행렬에서 "절대" 좌표를 계산하는 방법이 있습니까?

최대한 쉽게 설명해주세요!감사해요 :)

도움이 되었습니까?

해결책

OpenGL은 게임 엔진이 아니라 렌더링 라이브러리입니다.반면에 충돌 감지는 게임 로직의 기능입니다.따라서 이는 화면에 시각적 표현을 표시하기 위한 보기 메커니즘인 OpenGL과 아무 관련이 없어야 합니다. OpenGL은 게임 개체에 대해 아무것도 모르고 유용한 영구 데이터도 보유하지 않습니다.객체의 위치를 ​​행렬에 저장하고 변환을 통해 이동하려고 하면 결국 예측할 수 없는 동작으로 이어지는 누적 부동 소수점 오류의 영향으로 어려움을 겪을 수 있습니다.

대신에 해야 할 일은 모든 물체의 위치(및 방향, 속도 등)를 수동으로 유지하는 것입니다.모든 개체 이동은 애플리케이션 코드에서 수행되어야 합니다.객체를 렌더링할 때가 되면 현재 값을 읽고 이를 OpenGL에 전달합니다.일반적으로 렌더링하려는 각 유형 개체에 대한 다각형 데이터를 가져와 개체 인스턴스의 방향으로 회전하고 위치별로 변환한 다음 렌더링합니다.프레임당 한 번씩 반복합니다.

만약 당신이 이 분야에 대해 조금이라도 익숙하다면 모델-뷰-컨트롤러 패러다임에서는 게임 객체가 모델이고 OpenGL은 뷰를 제공합니다.따라서 필요에 따라 모델을 조작하고 필요할 때 뷰를 읽도록 해야 합니다.

다른 팁

모든 객체의 절대 위치를 추적하는 것이 가장 좋습니다.

실망스럽지 않습니까? 모든 OpenGL 및 그래픽 프로그래밍 초보자는 귀하와 유사한 질문이 있습니다. 다양한 참조 프레임을 추적하는 것은 어려울 수 있습니다.

내가 추천 할 첫 번째는 Amazon 또는 다른 소매 업체에서 OpenGL Superbible의 사본을 얻는 것입니다. 그것은 절대 시작부터 시작하여 거기에서 점진적으로 구축됩니다. Nehe 사이트를 추천 한 이전 포스터도 좋은 조언을 제공하고 있습니다.

질문 자체에 대해서는 OpenGL 프로그램을 만들 때 "ModelView"행렬을 ID로 설정할 수 있으며 (자세한 정보는 Superbible 참조) glpoint () 호출에서 설정 한 모든 좌표가 해당 행렬에 대해 정의됩니다. 참조 프레임. 여기에서 glpoint ()를 통화하는 것 외에는 아무것도하지 않으면 모든 객체가 동일하고 절대 좌표계에 있습니다.

이러한 함수가 기준 프레임을 변형시키기 때문에 Gltranslate 및 Glrotate 및 Glloadmatrix를 호출하기 시작하면 까다로워집니다. 그런 일이 발생하면 모든 후속 glpoint () 호출은 해당 새로운 참조 프레임과 관련이 있습니다.

(다른 포스터에서 언급 한 바와 같이, 이전 참조 프레임으로 돌아 가려면 스택을 변환하기 전에 스택에 ModelView 행렬을 저장 한 다음 스택을 "팝"하여 이전의 위치로 돌아갈 수 있습니다. .))

지원 사이트에서 이것을 설명하기는 어렵지만 치과 의사 의자에서 일련의 기계적 암으로 생각하십시오. 그는 트레이를 당신의 턱 아래에 있도록 움직일 수 있습니다. 그런 다음 턱을 컵으로 돌리기 위해 각도로 회전 할 수 있습니다. 각각의 독립 운동은 OpenGL에서 행렬로 구현 된 변환으로 생각할 수 있습니다.

내가 말했듯이, 이것을 온라인으로 제대로 설명하기는 어렵습니다. 최고의 책을 잡으면 훨씬 더 의미가 있습니다. 행운을 빕니다!

OpenGL을 배웠을 때 모든 것에 다음과 같은 두 가지 리소스를 사용했습니다.

그것은 나타납니다 Gametutorials CD를 판매하고, CD를 판매했지만, 그들은 잘 쓰여져서 구매할 가치가있을 수 있습니다.

하지만, Nehe 웹에서 여전히 무료 튜토리얼입니다 충돌 감지를위한 것입니다.

http://www.gamedev.net/reference/list.asp?categoryid=31

"절대"란 무엇을 의미합니까?

이전 지점과 관련하여 포인트를 원한다면 방금 한 변환을 뒤집을 수 있습니다. 두 번째 번역의 네거티브로 번역하고 동일한 축의 반대 방향으로 동일한 양으로 회전 한 다음 첫 번째 음수로 번역하십시오. 번역. 이렇게하면 새로운 좌표에서 이전 시스템으로의 전환이 제공됩니다.

또는 기존 지점을 새 좌표계로 가져와야하는 변환을 사용할 수 있습니다.

세계 좌표에서 객체 위치를 추적하고 직접 비교하십시오.

디스플레이를 수행하려면 카메라 모델을 사용하고 모든 변환을 적용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top