2011-01-06 6 views
3

화면 중앙에 다각형이 있다고 가정 해 봅시다 (2D 세계를 고려하여 정사각형이라고 가정 해 봅시다). 중심점에서 다각형을 다시 그리는 기능. 키보드에서 위, 아래, 왼쪽 또는 오른쪽을 누를 때마다 키를 누를 때마다 모양이 다시 그려집니다 (위 또는 아래로 y 좌표가 업데이트되고 좌우 키로 좌표가 업데이트 됨). 다음 사항을 고려하십시오. glutInitWindowSize (400,400); glutInitWindowPosition (400,200);오브젝트가 가시 범위를 벗어나지 않는지 확인하는 방법 -> opengl-> c

그리고 glMatrixMode (GL_MODELVIEW)를 사용하고 있는데, 모양을 카메라에서 보지 못하게하려면 어떻게해야합니까?

PS : 지금까지는 왼쪽과 아래에서 빠져 나가지 못하도록 방지 할 수 있습니다. y 또는 x가 음수이면 다시 그리기 할 때 좌표 새로 고침에서 테스트합니다 (그럴 경우 모양이 동일한 위치에 다시 그려집니다).),하지만 윈도우의 오른쪽과 상단 가장자리에서 같은 작업을 수행 할 수는 없습니다.

답변

3

카메라의 원거리 자르기 기준면을 더 멀리 설정하거나 카메라의 원거리 클립 속성을 넘어서는 물체가 아닌 것처럼 들리는 것처럼 들립니다.

+0

대답이 될 수 있습니다. 여전히 standart 카메라를 사용하고 있습니다. 그래서 정확히 무엇이 클리핑 한계인지 확실하지 않습니다. – John

+0

glFrustum을 사용하여 이러한 속성을 설정할 수 있습니다 () 또는 gluPerspective() 함수 : z 축 및 z 평면 절단 평면을 찾고 있습니다. zNear는> 0이어야합니다. 해피 코딩! –

+0

그 트릭 (일부 glFrustum 시도) 않았다 그리고 카메라의 한계를 얻을 수있는 방법을 얻을 수 있습니다. 대답을위한 많은 감사합니다 – John

1

마치 그래픽 개체의 너비와 높이를 추적하고 허용되는 최대 x 및 y 위치를 계산하기 위해 일부 빼기를 사용해야하는 것처럼 들립니다.

이것은 학교 과제 btw입니까?

+0

은 비행기로 게임을 만드는 것을 포함하는 CG 보조 프로젝트이며 플레이어의 비행기가 화면을 벗어나지 않도록해야합니다. 문제는 화면 크기를 조정할 수 있기 때문에 고정 된 크기의 윈도우를 사용하고 내부에 객체를 유지하는 예제가있는 경우 비교할 값을 얻는 방법을 실제로 모르겠다는 것입니다. – John

+0

화면 크기는 OpenGL (나는이 링크를 찾을 수있는 따옴표없이 "OpenGL은 화면 크기를 얻으려고") http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=253291 – davogotland

+0

내 질문에 어떻게 든 비슷합니다 이 하나, 그러나 제공된 질문은 완전한 답을주지 못한다. 이 방법을 잘못 테스트하는 경우가 아니면 – John

3

다른 답변으로 의견을 읽은 후 생각이 들었습니다. 적합할지 모르겠지만 도움이 될 수 있습니다.

내가 알기로는 플레이어가 통제하고있는 항공기를 볼 수 있으며 플레이어가 가지고있는보기와 관련하여 공예품을 움직이기 원하는 설정 내에서 항공기가 움직이는 것처럼 보일 수 있지만 보기를 종료하지 않으려 고합니다. 내 가정은 공예가 앞으로 날아갈 때 전체보기가 움직이고 있다는 것입니다 (이것은 틀릴 수도 있음).

제 아이디어는 비행기가보기의 중심에서 멀어 질수록 증가하는 비율로 공예의 중심쪽으로 항상보기를 이동시키는 것입니다. 공예품이 중앙 부근에서 가까워지면 카메라이 항공기에 다시 들어가는 속도가 증가합니다 (카메라 움직임의 속도 제한이 항공기의 속도 제한보다 큽니다). 카메라이 항공기에서 닫히면 속도가 느려집니다. (예, 특수 상대성과 비슷합니다.)

항공기가 원래 중심에 있었다는 사실을 알고 항공기가 수행 한 변형을 알면 항공기 중심으로부터의 거리를 따라갈 수 있어야합니다. 항공기에 적용되는 움직임을 따라 잡을 수있는 변형 행렬을 업데이트 할 수 있으며, 업데이트 할 때마다 카메라를 카메라의 중심으로 다시 이동시키는 역 연산을 계산 한 다음 해당 행렬에 스칼라 1을 곱할 수 있습니다/2, 전체 장면을 변환합니다. 카메라를 항공기의 방향과 함께 회전시키지 않으려면 그 행렬에 맞추어 회전을 넣지 마십시오. 얼마나 많은 카메라를 각 업데이트로 옮길 지 (필자의 예에서는 1/2) 당신에게 달렸습니다. 적용 할 부분과 다음 업데이트를 위해 저장하는 부분이 동일하기 때문에 1/2을 선택했습니다.

OpenGL을 사용한 지 꽤 오래되었지만 엔진에서 행렬을 다시 읽을 수 있다는 것을 기억합니다.하지만 그만큼 쉽게 따라 잡을 수 있습니다.

이것은 원하는 바가 전혀 없지만 도움이 될 것 같습니다.

+0

이것은 또한 매우 유용한 팁입니다! 결코 생각하지 않아도 되겠지. 내 책에 이걸 보관할거야. – John

관련 문제