gpt4 book ai didi

javascript - 如何使用 Three.js 创建网格

转载 作者:行者123 更新时间:2023-12-01 03:52:22 24 4
gpt4 key购买 nike

我有一个 .obj 文件

v 1 2 3
v 4 5 6
v 7 8 9

vt 0 1
vt 1 0

vn 0 0 1
vn 0 1 0
vn 0 0 1

f 1/1/1 2/2/2 3/3/3
f 1/1/2 2/2/3 1/2/3

我需要创建 THREE.Mesh。我愿意

var geometry = new THREE.BufferGeometry();
geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
geometry.addAttribute('normal', new THREE.BufferAttribute(normals, 3));
geometry.addAttribute('uv', new THREE.BufferAttribute(uvs, 2));
geometry.setIndex(new THREE.BufferAttribute(indices, 1));

var mesh = new THREE.Mesh(geometry, material);

我想我需要在数组中包含以下数据:

var vertices = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var normals = [0, 0, 1, 0, 1, 0, 0, 0, 1];
var uvs = [0, 1, 1, 0]
var indices = // ... ?

我不明白我需要在索引数组中存储什么?

最佳答案

这是我的示例,说明它应该是什么样子。面的定义表明,不存在具有相同纹理和法线索引的顶点。所以,其他如正常Geometry ,我们不能重用任何顶点,因为在 BufferGeometryindices 中定义的索引数组适用于顶点、uvs 和法线数组。 (我认为,这就是 @gaitat 试图解释的内容。)

v 1 2 3
v 4 5 6
v 7 8 9

vt 0 1
vt 0.5 0.5
vt 1 0

vn 0 0 1
vn 0 1 0
vn 1 0 0

f 1/1/1 2/2/2 3/3/3
f 1/1/2 2/2/3 1/2/3

var vertices = [1,2,3, 4,5,6, 7,8,9, 1,2,3, 4,5,6, 1,2,1]; // itemSize: 3
var uvs = [0,1, 0.5,0.5, 1,0, 0,1, 0.5,0.5, 0.5,0.5]; // itemSize: 2
var normals = [0,0,1, 0,1,0, 1,0,0, 0,1,0, 1,0,0, 1,0,0]; // itemSize: 3

var indices = [0,1,2, 3,4,5]; // itemSize: 1

编辑:在上面的示例中,第一个面的第二个顶点 ( 2/2/2 ) 用 1 进行索引。因此,我们将从顶点、uvs 和法线数组中获取第二项集: 4,5,6 0.5,0.5 0,1,0 。第二个面 ( 2/2/3 ) 的第二个顶点的索引为 4 。因此,我们将从每个数组中获取第 5 个项目集: 4,5,6 0.5,0.5 1,0,0 。两者的顶点位置和uvs相同但法线不同,因此不能重复使用。因为索引数组只存储所有的一个索引,而不是每个顶点位置、uv 和法线存储三个索引。

f 1/1/1 2/2/2 3/3/3
f 1/1/2 2/2/2 1/2/3

var vertices = [1,2,3, 4,5,6, 7,8,9, 1,2,3, 1,2,1]; // itemSize: 3
var uvs = [0,1, 0.5,0.5, 1,0, 0,1, 0.5,0.5]; // itemSize: 2
var normals = [0,0,1, 0,1,0, 1,0,0, 0,1,0, 1,0,0]; // itemSize: 3

var indices = [0,1,2, 3,1,5]; // itemSize: 1

在此示例中,两个面的第二个顶点相同 ( 2/2/2 )。在这种情况下,可以重用这些值。数组较短,第二个面中的顶点索引为 1 ,也是。

关于javascript - 如何使用 Three.js 创建网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com