Open wooseokyourself opened 3 years ago
Mesh::textures 에 저장된 텍스쳐들은 순차적으로 texture unit으로 사용됨. Mesh::draw() 에서 텍스쳐를 그릴 때 이 텍스쳐유닛을 셰이더의 sampler2D에 적절하게 할당해주어야 함.
textures = { "diffuse", "diffuse", "diffuse", "specular", "specular" } 이런 식으로 저장되어 있을 경우
textures[0] = GL_TEXTURE0
textures[1] = GL_TEXTURE1
textures[2] = GL_TEXTURE2
textures[3] = GL_TEXTURE3
textures[4] = GL_TEXTURE4
로 texture unit id 를 가지게 되며, 각 texture 들은 fragment shader로 다음과 같이 전달됨.
textures[0] --> uniform sampler2D diffuse0
textures[1] --> uniform sampler2D diffuse1
textures[2] --> uniform sampler2D diffuse2
textures[3] --> uniform sampler2D specular0
textures[4] --> uniform sampler2D specular1
또한 이런식으로 텍스쳐유닛이 적용되었을경우, fragment shader 의 Material 은 다음과 같이 변경되어야함?
struct Material {
sampler2D diffuse0;
sampler2D diffuse1;
sampler2D diffuse2;
sampler2D diffuse3;
sampler2D specular0;
sampler2D specular1;
sampler2D specular2;
sampler2D specular3;
sampler2D ambient0;
sampler2D ambient1;
sampler2D ambient2;
sampler2D ambient3;
float shininess;
};
aiMesh 를 Mesh 클래스로 매핑할 때 대강 다음과 같은 시퀀스로 텍스쳐를 aiMesh로부터 가져옴