2012-05-17 1 views
0

저는 OpenGL에서 2D 게임을 만들고 있고 정적 오브젝트 목록을 가지고 있습니다. 지금까지 나는 그것들을 반복하여 방 안으로 끌어다 놓았습니다. 그러나 어떤 큰 방에는 그들 중 2000 개가 있으며 속도는 중요합니다. 그래서 그들을 함께 구워서 결코 업데이트하지 않을 방법을 찾고 싶습니다. 그 이후의 무승부 루프에서 그들.OpenGL의 오브젝트가있는 정적 배경. "굽는"가장 좋은 방법은?

어떻게하면됩니까? 성능, 메모리 사용량, GPU 사용량 등의 측면에서 가장 좋은 방법은 무엇입니까?

oGL 2를 사용하는 것을 선호하지만 oGL 3+를 고려하고 있습니다.

+0

2D로 정확히 무엇을 의미합니까? 게임 플레이가 2 차원으로 제한되어 있지만 3D 모델을 사용하고 있거나 고전적인 스프라이트 기반 2D 게임을하고 있습니까? –

+0

그래픽은 2D입니다. – kvanberendonck

답변

1

가장 간단한 방법은 해당 객체의 모든 데이터를 GPU로 이동하여 렌더링 명령이 GPU 메모리에서 직접 메모리를 가져 오는 것입니다. VBO 또는 DisplayList (단순히 '이전'OpenGL 2.0 및 이전 버전)를 사용하여 수행 할 수 있습니다.

VBO를 사용하면 DisplayList를 가장 효율적으로 사용할 수 있기 때문에 모든 명령을 '팩'할 수 있습니다. 기하학 데이터 만 패킹 할 수 있으므로 모든 프레임마다 재료를 설정해야합니다. 관련 항목 : instacing (하지만 GL 3+를 사용해야 함)

또 다른 방법은 텍스처를 렌더링하고 간단한 Sprits로 표시하는 것입니다. http://http.developer.nvidia.com/GPUGems3/gpugems3_ch21.html

또 다른 옵션 : 큐브지도에 enfironment 렌더링 그 기술은 '사기꾼'이라고 여기에 몇 가지 정보입니다. 카메라 (언덕, 시도 등)에서 멀리 떨어져있는 물체에서는 작동하지만 실내에서는 이상하게 보일 수 있습니다.

0

첫 번째 옵션 : 개체에 단일 메쉬 만들기. 예를 들어, 표시되는 객체로 인덱스 배열을 동적으로 업데이트 할 수 있습니다. 이 경우 매우 유용한 텍스쳐는 아틀라스이어야합니다. 셰이더와 텍스처를 공유 할 수 없다면이 기술로 인한 영향은별로 없습니다. 이 방법을 조합하여 재질별로 텍스처를 그룹화하고 렌더링을 위해 단일 그리기 호출을 사용할 수 있습니다. 예를 들어, 첫 번째 draw draw는 하나의 텍스처로 100 개의 나무를 렌더링하고, 600 개의 사과를 렌더링하고 100 개의 구름을 렌더링합니다.

또 다른 옵션은, 당신의 객체가 정적 경우 FBO를 사용하여 질감에 그들 모두를 렌더링 할 수 있습니다. 객체가 배경과 같은 경우이 옵션이 적용될 수 있습니다. 예를 들어, 은하를위한 공간에서 임의의 랜덤 별 (1000 개)을 렌더링합니다.