2014-04-23 2 views

답변

1

프로그래머블 렌더링 파이프 라인 (예 : 쉐이더)의 출현으로 이제 여러 번의 그리기 호출없이 여러 텍스처를 메시에 적용하고 결합 할 수 있습니다.

현대 GPU는 여러 텍스처 단위 (glActiveTexture)를 가지고 있으며 셰이더는 한 번에 5 단위에서 읽을 수 있습니다. 예를 들어, 그림에 표시된 오른쪽 모델은 확산 텍스처가있는 Phong 조명 모델의 변형 인 normal map 텍스처와 아마도 하이라이트를위한 specular map 텍스처를 사용합니다. 이 세 가지 텍스처는 모두 텍스처 단위에 적용되며 전체 모델은 한 번의 호출로 렌더링됩니다. 프래그먼트 셰이더는이 텍스처를 읽고이를 결합하여 최종 이미지를 생성합니다.

귀하의 질문은 그다지 구체적이지 않으므로, 지금 말씀 드릴 수있는 전부입니다. 더 구체적인 질문이 있으시면 언제든지 물어보십시오.

+0

나는 이것을 실제로 obj 파일에서 읽은 다음에 계속 진행하는 방법에 대한 튜토리얼/코드를 찾고있다. ... 무엇을 위해서 어떤 점에서 어떤 버퍼를 넣어야 하는가? 올바른 시간에 올바른 텍스처를 사용하는 등등. 모든 데이터, 정점, 색상, 법선, vIndices, uIndices, nIndices, material을 저장하는 데이터 클래스가 있습니다. 거기에서 나는 무엇을해야할지 절대적으로 모릅니다 ... –

+0

나는 아주 완벽한 사이트 인 http://www.opengl-tutorial.org/을 여러분에게 가르쳐 줄 수 있습니다. 그리고 http://ogldev.atspace.co.uk/ 또한 추가 소스에 유용합니다. – glampert

0

다른 텍스처 (또는 텍스처 세트, 보통 맵과 같은 것이 필요한 경우 @glampert가 권장 됨)가 필요한 각 부품에 대해 별도의 그리기 호출을하는 것이 한 가지 방법입니다. 상당히 복잡한 형상이있는 것처럼 보이므로 그리기 호출이 여전히 상당하기 때문에 비효율적 일 수 있습니다. 하나의 버퍼에 모델에 대한 모든 정점/인덱스를 여전히 가질 수 있으므로 적어도 호출 할 때마다 정점 버퍼를 전환하지 않아도됩니다. 사실적인 재질을 원한다면 어쨌든 각 재질마다 다른 쉐이더가 필요할 수 있습니다. 즉, 모델을 별도의 그리기 호출로 분할해야합니다.

사람들이 실제로 이것을하는지는 확실치 않지만 시도해 보려는 한 가지 방법은 텍스처 배열을 사용하는 것입니다. 여기서 각 머티리얼의 텍스처는 하나의 레이어로 저장됩니다. 머티리얼 인덱스를 버텍스 애트리뷰트로 만들고 버텍스 쉐이더에서 프래그먼트 셰이더로 전달한 다음 텍스처 배열을 샘플링 할 때 레이어를 레이어로 사용하십시오.

관련 문제