.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
,它们告诉您要在网格上使用纹理的哪一部分。
U
和 V
值类似于 2D 图像中的 X
和 Y
位置。事实上,它们被称为 U/V
而不是 X/Y
只是为了避免误解,但它们代表相同类型的数据。它们也被归一化,这意味着 0
值是 "beginning" 和 1
意味着 "end" (不管你的纹理的分辨率 - 所以你可以调整纹理的大小而不会破坏你的渲染).
渲染三角形时,基本上有 3 个顶点,每个顶点都有自己的 UV
值。如果您在 2D 图像中将这些值标记为 X/Y
,您将得到一个使用与渲染相同的纹理部分的三角形。
这是关于这个话题的另一个答案:
本题请参考以下文档: 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
,它们告诉您要在网格上使用纹理的哪一部分。
U
和 V
值类似于 2D 图像中的 X
和 Y
位置。事实上,它们被称为 U/V
而不是 X/Y
只是为了避免误解,但它们代表相同类型的数据。它们也被归一化,这意味着 0
值是 "beginning" 和 1
意味着 "end" (不管你的纹理的分辨率 - 所以你可以调整纹理的大小而不会破坏你的渲染).
渲染三角形时,基本上有 3 个顶点,每个顶点都有自己的 UV
值。如果您在 2D 图像中将这些值标记为 X/Y
,您将得到一个使用与渲染相同的纹理部分的三角形。
这是关于这个话题的另一个答案: