据我所知,OpenGL不支持所需的每个面的属性引用。我已经决定使用.obj文件的材料文件,并且已经成功地将它们加载到我的项目中。然而,我认为材料是按对象组使用的,我意识到.obj格式实际上可以使用每个面的材料。因此,顶点组(或者说网格组)可以有多个特定面的材料。
我将能够转换小的变量,如镜面等,到每个顶点,但整个材料可以不同的面对面;照明,环境,镜面,纹理地图(漫射法线等)。这将是很容易的,如果材料是每个网格,以便我可以加载他们作为子网格和附加相应的材料在他们。
,我要如何处理一个网格中的多个材料,其中的材料在其中的各个面之间分布不均匀?
发布于 2015-04-14 15:20:23
首先,这些表面材料的价值是什么?因为,除非您能够在一次传递中呈现它们,否则您还是可以将它们分割成不同的网格。如果使用索引缓冲区,那么只需使用其中的几个,每个材料一个。然后,您可以为每种材料类型设置制服/更换着色器。
我的渲染器的工作方式:
iterate through meshes
bind mesh's vertex array object
bind mesh's uniform buffer object
iterate through mesh's materials
use shaders, bind textures, set uniforms...
draw material's index buffer with glDrawElements当然,你不想为每一种材料更换着色器,所以如果你确实需要使用多个着色器,而不仅仅是更换制服,那么你就需要把它们分批在一起。
这并不是指obj/mtl,而是任何网格/材料格式。
https://stackoverflow.com/questions/29627298
复制相似问题