在托管Direct3D 9中使用多个纹理进行渲染

时间:2013-02-13 11:59:40

标签: c# 3d directx textures texture-mapping

我是一个非常新的Direct3D,几天来一直在寻找我的问题的解决方案。我看到的大多数覆盖纹理的教程只使用一个纹理。对于我的程序,我有多个纹理映射到构成我的网格的特定顶点集合。

我的问题是如何在场景中加载多个纹理?以及如何将顶点集合映射到一个纹理?

例如,如果我有一个汽车的网格,我有一组纹理,如:

 Tyres.dds
 Body.dds
 Cabin.dds

鉴于汽车,我如何将构成轮胎的顶点映射到tyres.dds纹理,body到body.dds和舱到cab.dds。所有这些纹理不仅要渲染一个。

任何帮助将不胜感激, 谢谢

1 个答案:

答案 0 :(得分:1)

通常这是通过子网格完成的。这意味着网格由若干部分组成,这些部分表示为例如三角形列表。每个子网格都分配了一个材料。可以根据需要定义此材料。它可能包括漫反射颜色,粗糙度和纹理。

因此,在渲染网格时,您基本上会迭代每个子网格,将材质参数发送到图形卡,然后绘制它。

DirectX 10中另一个可能的解决方案是通过TextureIndex变量扩展顶点声明。或者你可以使用3d纹理坐标。这样,您可以将所有纹理作为纹理阵列发送到图形卡,并通过一次绘制调用绘制网格。但是,DirectX 9中不支持纹理数组。因此,您可以坚持使用方法1或尝试模拟纹理数组。