.babylon 文件格式的法线向量的用途是什么? (用于 BabylonJS 3D 建模)

What is the purpose of normal vectors in .babylon file format? (for use in BabylonJS 3D Modelling)

本题请参考以下文档: BabylonJS JSON File Format

在 "vertexData" 节点中,顶点、法向量和 uv 被声明用于构建 3D 对象。请参阅链接文档页面底部示例 .babylon 文件中的以下 "geometry" 节点。

"geometries": {
    "boxes": [{
        "id": "BoxPrimitive",
        "size": 2,
        "canBeRegenerated": true,
        "tags": "Box Primitive Cube CanBeRegenerated"
    }],
    "vertexData": [{
        "id": "CubeGeometry",
        "updatable": false,
        "positions": [ 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1],
        "normals": [0.5773, -0.5773, 0.5773, 0.5773, -0.5773, -0.5773, -0.5773, -0.5773, 0.5773, 0.5773, 0.5773, 0.5773, -0.5773, 0.5773, 0.5773, 0.5773, 0.5773, -0.5773, 0.5773, 0.5773, 0.5773, 0.5773, -0.5773, -0.5773, 0.5773, -0.5773, -0.5773, 0.5773, 0.5773, -0.5773, -0.5773, -0.5773, -0.5773, -0.5773, -0.5773, -0.5773, -0.5773, 0.5773, -0.5773, -0.5773, -0.5773, 0.5773, 0.5773, 0.5773, 0.5773, 0.5773, -0.5773, 0.5773, -0.5773, 0.5773, 0.5773, -0.5773, -0.5773, -0.5773, -0.5773, 0.5773, -0.5773, 0.5773, 0.5773, 0.5773, 0.5773, 0.5773, -0.5773, 0.5773, -0.5773, -0.5773, 0.5773, 0.5773, -0.5773, -0.5773, 0.5773, -0.5773, -0.5773, 0.5773, 0.5773, -0.5773, -0.5773, 0.5773, 0.5773, -0.5773, 0.5773, -0.5773, -0.5773, 0.5773, -0.5773, 0.5773, 0.5773],
        "uvs": [0.5, 0.5, 0.5, 0, 0, 0.5, 0.5, 1, 0, 1, 0.5, 0.5, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 1, 1, 0.5, 0.5, 0.5, 0.5, 0, 0, 0.5, 0, 0, 0, 0.5, 0.5, 1, 0, 1, 0, 0.5, 0.5, 1, 0, 1, 1, 1, 1, 0.5, 0.5, 0, 0, 0, 0, 0.5],
        "indices": [0, 1, 2, 3, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 17, 2, 4, 18, 5, 19, 20, 21, 22, 23, 10, 12, 24, 25, 26, 27, 28]
    }]
}

在这个对象中,有 29 个(通常是冗余的)顶点,在 "positions" 中声明为 3 个浮点组,然后由 "indices" 排列,它们是表示三角形的三个整数组通过连接引用的 "position" 顶点绘制。

每个 "position" 顶点都有一个声明的法向量,它只是标准化为单位向量的位置向量。这样做的目的是什么?为什么包括在内?没有它可以生成 3D 模型吗?

另外,"uv's"是什么。每个顶点都有一对 2 uv。这些是什么意思?

UV 字段称为 Texture Coordinates,它们告诉您要在网格上使用纹理的哪一部分。

UV 值类似于 2D 图像中的 XY 位置。事实上,它们被称为 U/V 而不是 X/Y 只是为了避免误解,但它们代表相同类型的数据。它们也被归一化,这意味着 0 值是 "beginning" 和 1 意味着 "end" (不管你的纹理的分辨率 - 所以你可以调整纹理的大小而不会破坏你的渲染).

渲染三角形时,基本上有 3 个顶点,每个顶点都有自己的 UV 值。如果您在 2D 图像中将这些值标记为 X/Y,您将得到一个使用与渲染相同的纹理部分的三角形。

这是关于这个话题的另一个答案: