3d - 网格、子网格、 Material 、子 Material 、纹理如何相互关联

标签 3d

令我困扰的是,我无法弄清楚网格、 Material 、纹理实际上如何与模型的组成相关

我想要的只是快速解释一下它们之间的关系。

最佳答案

简而言之:

网格 - 它只是您想要绘制的一些对象,例如汽车。它可以由许多子对象构建,但为了简单性和易用性,它被实现为一个包含您所需的所有对象的对象。例如:当您想将一辆汽车放在您的水平面上时,您通常不想单独放置每个车轮/轮胎 - 因此您只有一个网格:“一辆汽车”。

子网格 - 当您渲染某些多边形列表时,您需要在开始渲染之前设置某种执行操作的方式(这称为 Material )。这意味着您在单个渲染操作期间不能使用多种 Material 。因为汽车是由许多不同的 Material 制成的,例如玻璃、金属等,所以您需要将其划分为子网格。您将拥有用于 window 、轮胎、车轮和车身的子网格 - 每个子网格都将使用不同的 Material ,如玻璃、橡胶、铝等,并且每个子网格都将在不同的渲染操作中进行渲染,并选择不同的 Material 。因此 Material 定义并不存储在网格对象中,而是存储在每个子网格中。

Material - 它是“向屏幕添加新三角形时要执行的操作”的定义,它可能因引擎和底层 API 版本而异,但它只存储您可能为您设置的所有参数 Material ,如不透明度、光泽度、颜色(纹理)、像素/顶点着色器等。

纹理 - Material 可以使用图像作为输入 2D/3D 数据。当您读取 Material ​​定义时,它会定义图像文件名,读取图像并将其放入 GPU 中并分配一些 ID。稍后,当您选择 Material 时,GPU 将根据其 ID 使用正确的纹理,我想这就是您现在需要了解的全部内容:)

我无法帮助您处理子 Material ,因为我认为它高度依赖于引擎,如果您告诉我们您使用的是什么,我们也许可以告诉您更多信息。

关于3d - 网格、子网格、 Material 、子 Material 、纹理如何相互关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454403/

相关文章:

java - 如何在客户端*无需*安装 Java3D 等插件的情况下在网页上编写 Java 3D 元素

opengl - 将 Z 轴与矢量对齐的最简单方法是什么?

xcode - Xcode 8 中的 "Always use Y-Up axis"去哪儿了?

c# - 3D稀疏矩阵实现?

math - 计算旋转以查看 3D 点?

python - 匹配python中的特定字符串+任意 float

javascript - Three.js 太空游戏相机控制

opengl - 3D游戏特效,火、闪电、水、冰

arrays - OpenGL点数组

graphics - 为什么使用 JPEG 图片时必须使用 2.2 的 gamma?