繁体   English   中英

使用多个纹理将纹理分配给对象

[英]Assigning texture to an object using multiple textures

在此处输入图片说明

我正在制作一个对象加载器,所有纹理部件都在不同的纹理文件中。 将其映射到模型的最佳解决方案是什么? 我是否需要将具有自身纹理的每个零件都视为1个模型,以便最终实体具有许多单独的绘制调用,每个调用都具有一个纹理?

随着可编程渲染管线(即shader )的出现,您现在可以将多个纹理应用并组合到网格中,而无需进行多次绘制调用。

现代GPU具有多个纹理单元( glActiveTexture ),并且着色器可以一次从may单元读取。 例如,您在图片中显示的右侧模型可能使用了Phong照明模型的变体,其中具有高光扩散纹理, 法线贴图纹理和镜面贴图纹理。 当然,所有这三个纹理都分别应用于一个纹理单元,并且整个模型在一次绘制调用中被渲染。 然后,片段着色器读取该纹理并将其组合以生成最终图像。

您的问题不是很具体,所以我现在只能说这些。 如果您还有其他具体问题,请随意提问。

一种可能的方法是,对需要不同纹理的每个零件(或一组纹理,如果您需要法线贴图,如@glampert建议)进行单独的绘制调用。 您似乎具有相当复杂的几何形状,因此可能不会非常低效,因为您的绘制调用仍然会相当大。 您仍然可以将模型的所有顶点/索引保存在一个缓冲区中,因此至少不必为每个调用切换顶点缓冲区。 如果需要逼真的材质,则每种材质可能都需要一个不同的着色器,这意味着您必须将模型拆分为单独的绘制调用。

不知道人们是否真的这样做了,但是我很想尝试的一种方法是使用纹理数组,其中每种材料的纹理都存储为一层。 使材质索引成为顶点属性,将其从顶点着色器传递到片段着色器,然后在对纹理数组进行采样时将is用作图层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM