처음에는 3D 프로그래밍과 libgdx를 처음 사용했습니다. 몇 가지 자습서를보고 이미 원하는 장면을 렌더링합니다. 모든 보이는 얼굴에 대해 ModelBuilder.createRect()
으로 생성 된 1x1x1 블록이 있으므로 다른 블록이이 블록의면을 덮고 있으면이 블록에 대해 rect가 작성되지 않습니다. 또한 꼭지점과 바닥 꼭지점은 필자가 볼 수 없기 때문에 필요하지 않습니다 (바닥을 제외하고). 그래서 저는 이것이 매우 효율적이라고 생각했습니다. 또한 Backface culling
이 활성화되어 있고 Viewfrustum culling
을 사용하고 있습니다. 그러나, 방향을 보면, 많은 블록이 내 viewfrustum에 있으며, FPS는 15-20으로 내려갑니다. 내 노트북은 5 세 이상이고 성능은 최고가 아니기 때문에 이것은 여전히 괜찮습니다. 그러나 this answer은 저를 생각하게했습니다.Libgdx로 효율적인 3D 블록 렌더링
"ModelBuilder는 디버그에만 사용됩니다." 좋아, 그럼 어떻게 내 상자를 만들어야하니? 간단한 사각형에 대해 모델링 앱 (Blender와 같은)에서 Model
을 만들어야하는 이유는 무엇입니까? 이렇게하면 다른 블록이 차지하는 얼굴을 도저히 추려 낼 수 없습니다. 제 질문은 : 어떻게 그 상자를 가장 효율적으로 만들고 렌더링 할 수 있습니까?
IIRC를 사용하면 모든 직사각형에 대해 하나의 그리기 호출이 이루어 지므로 많은 사각형이 있으면 매우 비쌉니다. DecalBatch에서 수행중인 작업을 확인하십시오. 모든 직사각형을 단일 그리기 호출로 결합 할 수 있습니다. – Tenfour04
그러나'ModelBatch'는 버퍼가 가득 차면'flush()'를하지 않으므로 GPU에 한 번만 보내집니다. 또한 DecalBatch는 내가 아는 것만 큼 필요한 것은하지 않으며 3D 공간에서 2D 'Texture'를 그립니까? – Springrbua
아 맞습니다. 블렌딩을 사용하고 있습니까? 얼마나 많은 rect를 그리는거야? DecalBatch는 텍스처가없는 직사각형을 그릴 수 있습니다. 사용자 정의 GroupStrategy를 설정하면됩니다. 이 사람 (http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=12493&p=55804&hilit=decalbatch#p55804)은 DecalBatch와 ModelBuilder가 직사각형에 대해 비슷한 성능을 가지고 있음을 발견했습니다. – Tenfour04