我正在使用 Three.js。我有一个收藏3D点(x, y, z) 和面的集合。一张脸是由K points。它可以是凸的,也可以是凹的。
我在 Three.js 文档中找不到任何可以帮助我的内容。一种解决方案可能是对这些形状进行三角测量,但到目前为止我还没有找到任何简单的 3D 三角测量算法。
另一个解决方案是做类似的事情:
var pointsGeometry = new THREE.Geometry();
pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0));
pointsGeometry.vertices.push(new THREE.Vector3(10, 10, 0));
pointsGeometry.vertices.push(new THREE.Vector3(0, 10, 0));
pointsGeometry.vertices.push(new THREE.Vector3(1, 3, 0));
pointsGeometry.vertices.push(new THREE.Vector3(-1, 3, 0));
pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0));
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
var mesh = new THREE.Shape/ShapeGeometry/Something(pointsGeometry, material);
group.add(mesh);
scene.add(group);
我有很多这样的形状,它们一起构建了一个封闭的表面。
有什么建议吗?
感谢您的关注。
祝你今天过得愉快。
正如您所指出的,有两种方法可以实现这一目标:
- 使用 3D 三角测量算法(Three.js 未提供);
- 使用通常用于 Three.js 的 2D 三角测量算法
Shape
在几何体的每个面上应用了一些变换的对象。
最后一个看起来很酷,但不幸的是,当我尝试时,我意识到它并不是那么微不足道。我想出了与 Paul-Jan 类似的观点:
对于几何体的每个面:
- 计算面的质心;
- 计算面部法线;
- 计算人脸矩阵;
- 将 3D 点投影到面部的 2D 平面上;
- 创建几何体(用
Shape
三角测量算法);
- 将面矩阵应用于新创建的几何体
- 创建一个
Mesh
并将其添加到Object3D
(我尝试将所有几何图形合并为 1,但失败了ShapeBufferGeometry
)
Check 这把小提琴 https://jsfiddle.net/1q0auhuq/8/.
请小心绕线顺序 https://www.khronos.org/opengl/wiki/Face_Culling你的顶点或把THREE.Material.side
to THREE.DoubleSide
以防止面孔被剔除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)