OpenGL 渲染具有多个 material 和纹理的 .obj 文件
OpenGL render .obj files with multiple material and textures
我正在为具有多个 material 和组的 .obj 文件编写解析器(因此我也在解析 usemtl 和 material 文件)。我可以加载和渲染顶点。如何处理不同的纹理和 materials?
我是一个一个地渲染每个 material 还是有一个巨大的着色器来选择 ID?以及如何在 GPU 缓冲区上存储不同的纹理? (目前我正在使用 GL_TEXTURE_2D_ARRAY 但它们必须具有相同的大小。
因此,为了处理不同的 material,每个对象都有 material 规范,如 ambient_color、diffuse_color 和 specular_color。您只需将这些值作为 uniform
传递给片段着色器并使用不同的 material 规格渲染对象。
此外,您可以在一个片段着色器中同时使用 128 个纹理,因此您可以渲染具有多个纹理的对象。但大多数情况下,一个对象是由组组成的,每个组只有一个纹理,所以你只需要在片段着色器中有一个 sampler2D
对象,只是你为纹理传递的统一值会改变。
有效处理此问题的最佳方法是将具有相同纹理的组一起渲染,以防止大量纹理更改。
我正在为具有多个 material 和组的 .obj 文件编写解析器(因此我也在解析 usemtl 和 material 文件)。我可以加载和渲染顶点。如何处理不同的纹理和 materials?
我是一个一个地渲染每个 material 还是有一个巨大的着色器来选择 ID?以及如何在 GPU 缓冲区上存储不同的纹理? (目前我正在使用 GL_TEXTURE_2D_ARRAY 但它们必须具有相同的大小。
因此,为了处理不同的 material,每个对象都有 material 规范,如 ambient_color、diffuse_color 和 specular_color。您只需将这些值作为 uniform
传递给片段着色器并使用不同的 material 规格渲染对象。
此外,您可以在一个片段着色器中同时使用 128 个纹理,因此您可以渲染具有多个纹理的对象。但大多数情况下,一个对象是由组组成的,每个组只有一个纹理,所以你只需要在片段着色器中有一个 sampler2D
对象,只是你为纹理传递的统一值会改变。
有效处理此问题的最佳方法是将具有相同纹理的组一起渲染,以防止大量纹理更改。