문제

나는 2D 게임을하고있다. XY 비행기를 상상해 보면 당신은 캐릭터라고 상상해보십시오. 캐릭터가 걸을 때 나머지 장면이 보입니다.

XY 평면이 상당히 크고 현재보기 외부에 다른 캐릭터가 있다고 상상해보십시오.

다음은 OpenGL과 관련하여 내 질문이 있습니다. 해당 객체가 현재보기 외부에서 렌더링되지 않으면 처리 시간을 먹습니까?

또한, 장면의 일부가 보이지 않는 것을 피하기위한 몇 가지 접근법은 무엇입니까? 현재 위치에서 1000 단위의 큐브가 있다면 그 객체를 렌더링하는 것을 원하지 않습니다. 어떻게 OpenGL이 그것을 렌더링하지 못하게 할 수 있습니까?

가장 쉬운 접근 방식은 위치를 계산 한 다음 너무 멀리 떨어져있는 경우 해당 큐브/물체를 그리지 않는 것입니다.

도움이 되었습니까?

해결책

장면 그래프를 올바르게 설정하면 시야 외부의 객체를 디스플레이 파이프 라인에서 초기에 컬링해야합니다. 객체가 보이지 않는지 확인하려면 코드에 상자 점검이 필요하므로 일부 처리 오버 헤드가있을 것입니다.

객체를 현명한 계층 구조로 구성하면 하나의 상자 점검으로 장면의 큰 섹션을 컬링 할 수 있습니다.

다른 팁

Opengl FAQ "클리핑, 컬링 및 가시성 테스트"에서 다음과 같이 말합니다.

OpenGL은 주어진 관점에서 주어진 프리미티티가 보이는지 여부를 결정하는 데 직접적인 지원을 제공하지 않습니다. 최악의 경우 응용 프로그램은 이러한 테스트를 수동으로 수행해야합니다. 이전 질문에는이를 수행하는 방법에 대한 정보가 포함되어 있습니다.

계속해서 그 링크의 나머지 부분을 읽으십시오. 모두 관련이 있습니다.

일반적으로 응용 프로그램은 이러한 최적화를 수행해야합니다. OpenGL은 말 그대로 렌더링 부분 일 뿐이며 객체 관리 또는 이와 유사한 것을 수행하지 않습니다. 보이지 않는 것에 대한 데이터를 전달하는 경우 여전히 관련 좌표를 볼 공간으로 변환해야합니다.

파이프 라인에서 보이지 않는 물체를 컬링하는 몇 가지 방법이 있습니다. 객체가 카메라 뒤에 있는지 확인하는 것은 아마도 객체 당 간단한 계산으로 평균적으로 데이터 세트의 절반을 거부 할 수 있기 때문에 수행하기 가장 쉽고 저렴한 점검 일 것입니다. 실제보기 좌절에 대해 동일한 종류의 테스트를 수행하여 전혀 보이지 않는 모든 것을 거부하는 것은 그리 어렵지 않습니다.

분명히 복잡한 게임에서는 모든 작은 물체에 대해이 작업을 수행하고 싶지 않을 것이므로 계층 적으로 그룹화하는 것이 일반적입니다 (예 : 이미지가 아니라고 판단한 경우 총을 렌더링하지 않을 것입니다. 공간적으로 (예 : 세계를 그리드/쿼드 트리로 나누는 것/Octree 그리고 당신이 알고있는 물체를 거부하는 것은 이미 결정한 영역 내에 있습니다.

"유일한 승리의 움직임은 플레이하지 않는 것입니다."

모든 glvertex 등은 궁극적으로 화면에서 렌더링되는지 여부에 관계없이 성능 히트가 될 것입니다. 주변을 돌아 다니는 유일한 방법은 어쨌든 렌더링되지 않는 물체를 그리지 않는 것입니다.

가장 일반적인 방법은 Frustum보기 카메라에 묶었 다. 그와 부부 Octtree 또는 쿼드 트리 게임이 3D/2D인지 여부에 따라 Frustum에 대해 모든 단일 게임 객체를 확인할 필요가 없습니다.

기본 드라이버 5월 무대 뒤에서 컬링을하십시오. 그러나 OpenGL 표준의 일부가 아니기 때문에 그에 의존 할 수는 없습니다. 어쩌면 컴퓨터의 드라이버가 그렇게하지만 다른 사람의 게임 (게임을 실행할 수있는 사람)은 그렇지 않을 수도 있습니다. 자신의 컬링에 가장 적합합니다.

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