2012-11-21 4 views
0

논증의 목적으로, 20x20 인 2 차원 그리드에 벽 객체를 놓기를 원한다고 가정 해 봅시다 (간단히하기 위해 1x1 사각형을 가장하자). 0에서 1 사이의 좌표에서 모델링 된 객체를 가지고 있다고 가정 해 봅시다.OpenGL을 사용하여 그리드의 해당 위치에 개체를 배치하는 올바른 방법은 무엇입니까?

내 질문에 올바른 방식으로 OpenGL을 사용합니다. 좌표를 수동으로 변경할 수있는 방법이 많이 있지만, 미래를 위해 나를 교화),이 개체를 위치의 그리드 (5,5)에 어떻게 배치합니까? 그것은 모델 행렬과 관련이 있습니까?

답변

3

예, 올바른 생각이 있다고 생각합니다.

모델 공간에 (0,0)에서 (1,1)까지의 벽이 있고이 벽의 특정 인스턴스를 (5,5)에서 (6,6)에 배치하려는 경우 이 벽을 x 및 y 방향으로 5 단위로 변환되는 모델 행렬로 그릴 수 있습니다.

+0

그래서, 모델 행렬에 변환 행렬을 곱하고, 뷰와 프로젝션 행렬을 곱한 다음이를 버텍스 셰이더로 전달합니까? – xtraorange

+0

작동해야합니다. 예. – Tim

1

변환 행렬을 사용하여 단일 프리미티브를 배치하면 안됩니다. 유니폼 (일명 매트릭스)을 변경할 때마다 래스터 라이저의 pipline을 플러시해야 할 가능성이 높습니다. 이는 성능 저하 요인입니다.

일반적으로 효율적이기 위해서는 주어진 변환 행렬을 장면 내의 최소 100 개의 기본 요소에 적용해야합니다. 따라서 타일 격자를 사용하는 경우 더 큰 Vertex Array로 복제 번역하거나 인스 턴싱 (사용 가능한 경우)을 사용하는 것이 좋습니다.

+0

알아두면 좋을 것 같습니다. 구체적으로 인스턴스화한다는 것은 무엇을 의미합니까? – xtraorange

+0

@xtraorange : glDrawArraysInstanced에 대한 참조를 참조하십시오. http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstanced.xml - 새로운 셰이더 변수 gl_InstanceID를 사용하여 버퍼 (유니폼 배열 또는 1D 텍스처)에 인덱싱합니다. 형상의 목표 위치로 – datenwolf

관련 문제