我正在为包含多种材料和组的.obj文件编写解析器(因此我也解析了usemtl和材料文件)。我可以加载和渲染顶点。我如何处理不同的纹理和材料?
我是逐个呈现每种材料还是使用巨型着色器来选择ID?如何在GPU缓冲区上存储不同的纹理? (目前我正在使用GL_TEXTURE_2D_ARRAY,但它们必须具有相同的大小。
答案 0 :(得分:0)
因此,要处理不同的材质,每个对象都有材质规格,如ambient_color,diffuse_color和specular_color。您只需将这些值作为uniform
传递给片段着色器,然后使用不同的材质规格渲染对象。
此外,您可以在一个片段着色器中同时使用128个纹理,因此您可以渲染具有多个纹理的对象。但大多数情况下,一个对象由组组成,每个组只有一个纹理,所以你只需要在片段着色器中有一个sampler2D
对象,只需要为纹理传递的均匀值就会改变。
有效处理此问题的最佳方法是将具有相同纹理的组一起渲染,以防止大量纹理更改。