2011-04-23 3 views
2

OpenGL을 사용하여 C++에서 튀는 공 (x 및 y, Z로 튀지 않음)이있는 스크린 세이버를 씁니다. 이 볼이 화면의 가장자리에 닿으면 공에 작은 손상 패치가 나타납니다. (볼이 충분히 손상되면 폭발 할 것입니다.) 볼이 회전하고 있지 않을 때 볼의 손상 부분을 찾는 것이 쉬운 부분입니다.회전하는 끝에서부터 끝점까지 결정

내가 결정한 알고리즘은 위치를 가장 오른쪽, 가장 위쪽, 맨 위 및 맨 아래 가장 정점으로 유지하는 것입니다. 모든 충돌에 대해 필자는 분명히 어떤 화면 가장자리에 충돌했는지 알 필요가 있습니다. 볼을 굴릴 수 있기 전에 스크린 가장자리에 닿을 때 왼쪽 스크린 가장자리에 충돌하면 맨 왼쪽 꼭지점이 볼을 치는 지점임을 알 수 있습니다. 거기에서, 나는 그 점으로부터 d 거리 내에있는 모든 꼭지점을 얻습니다. 볼의 표면에있는 점만 실제 꼭지점이 필요 없습니다.

이렇게하면 모든 꼭지점을 읽고 볼의 x, y 위치로 변환 할 필요가 없으며 어떤 화면이 꺼져 있는지 확인할 필요가 없습니다. 이렇게하면 내 모든 문제가 해결되지만 지옥처럼 느려질 것입니다.

현재 볼의 회전은 피치, 요 및 롤로 제어됩니다. 문제는 공의 바깥 쪽 표면의 어떤 점이 내 요, 피치 및 롤각이 주어진 스크린의 가장자리에 닿았 는가하는 것입니다. 나는 위로, 오른쪽 및 방향 벡터를 지키는 것을 들여다 보았습니다. 그러나 저는 완전히 새로운 것으로 누군가가 알아 차리면 완전히 잃어 버렸습니다. Wikipedia에서 회전 행렬 기사를 여러 번 읽고 빈 그림을 그렸습니다. 하나의 회전 각도를 없애면 훨씬 간단 해 지겠지만 나는 그렇지 않을 것입니다.

답변

0

회전 각도가있는 경우 코드에서 모델 뷰 매트릭스를 다시 만들 수 있습니다. 이 행렬을 사용하면 회전을 메쉬의 꼭지점에 (곱하기만으로) 간단히 적용한 다음 이전에했던 것처럼 가장 왼쪽 (또는 무엇이든) 정점을 찾을 수 있습니다.

This article은 사용자가 가지고있는 각도로 회전 행렬을 만드는 방법을 설명합니다.

+0

미안하지만 내가 말했듯이 나는 그것을 계속 읽고 공란을 계속 그려왔다. 나는 그것이 무엇을 필요로 하는지를 알고, 요, 피치 및 롤의 반대 방향을 사용하여 회전 행렬을 생성 한 다음 적절한 가장자리 정점 (왼쪽, 오른쪽, 위, 아래)에 적용합니다. 나는 직장에서의 지난 주 동안 내 생각에 뇌가 튀어 올랐다 고 생각합니다. (불행하게도 나는 직장에서 쓰는 프로그램이 훨씬 덜 흥미 롭다.) – Ross

+0

아주 느려서 전체 모델에 아무것도 적용하고 싶지 않다. 내 모델에는 거의 10,000 개의 꼭지점이 있습니다. 점의 x 거리 내에서 정점을 찾기 위해 이미 정점 룩 업을 수행하는 것이 느립니다. 궁극적으로 룩업 테이블을 생성하여 속도를 높이겠습니다. – Ross