내 장면의 모델을 설명하는 클래스가 있다고 가정합니다 (예 : 사각형). 이 클래스에는 가장 중요한 모델 행렬과 VAO가 포함됩니다. 내 렌더링 코드에서 도면 루프를 설계 할 때 나는 이제 다음 (의사 코드)를 수행 한 번OpenGL VAO 및 유니폼 : 렌더링 루프의 여러 모델 처리
functon draw{
bind VAO
draw elements
/* How to handle the uniforms that are different for each model?? */
}
:
functon draw{
list = getListOfMeshes() /* List containing mesh class items */
iterate list { /* could be for example 1000 different models */
set model matrix uniform
bind VAO
draw elements
}
}
내가이 아마 한 VAO 호출에 최적화 될 수 있음을 이해 나는이 장면 반복이 병목이되는 장면에서 많은 모델을 얻는다. 이 rendring 루프를 디자인 할 수있는 다른 방법이 있습니까?
유니폼 배열을 업로드하고 glDrawElementsInstanced 명령을 사용하여 인스턴스 ID별로 액세스 할 수 있습니다. 이 글을 읽고 싶을 수도 있습니다. http://www.opengl.org/wiki/Vertex_Rendering#Instancing – Tim
나는 당신이 성취하려고 시도하는 것을 이해 합니다만, 이것이 좋은 생각이라고 생각하지 않습니다. 한 장면에서 주어진 메쉬를 여러 번 재사용하고 싶지만 다른 유니폼 세트를 적용했다면 어떨까요? 입자 시스템 및 유사한 상황에 대해 생각하십시오. – datenwolf
@Tim : 이것은 아마도 내가 생각했던 것과 일치합니다. 이 경우 코드에서 일부 위치가 업데이트되면 버퍼 배열의 인스턴스 만 업데이트하면됩니까? (예 : 애니메이션 루프). 예를 들어 올바른 모델 행렬에 액세스하기 위해 정점 셰이더에서 gl_InstanceID를 사용해야합니까? – toeplitz