有没有办法可以从现有几何体的点/顶点数组创建用于TubeGeomety(path,...)的Path或Curve?

时间:2018-03-13 04:59:17

标签: three.js

我对这三个人都非常陌生。一般来说是js。 首先,我选择带有dat.gui复选框的polyHedron几何体 这就是说四面体。这些选择有效。 我还有一个dat.gui复选框,用于phongfill或线框渲染。 我最初只想要一个线框类型的网格,但不是所有的内部三角形。我发现了edgesgeometry()函数,它绘制了我想要的东西(仅限硬边)。然而,已知存在线宽不再在Windows中工作的问题。所有线条均以行程重量/宽度1绘制。

我想使用tubeGeometry()绘制任意半径的管,而不是1个重量的线。我知道我必须在连接顶点上/上方绘制诸如球体之类的东西,这样看起来并不荒谬。

geo = new THREE.TetrahedronBufferGeometry(controls0.Radius,controls0.Detail);
...
egeo = new THREE.EdgesGeometry( geo );
lmat = new THREE.LineBasicMaterial({ color: 0x0099ff, linewidth: 4 });
ph = new THREE.LineSegments( egeo, lmat );
scene.add(ph);
....
在控制台中玩耍时,我发现了一些几何/缓冲区Geomery数组,它们很可能是我所选X-hedron的顶点/索引,因为它们的大小随着类型(四/ icosa等)选择而变化。细节增加/减少:

//p = dome.geometry.attributes.uv.array;
p = egeo.attributes.position.array
//p = geo.attributes.uv.array
...
var path = new THREE.Curve();
path.getPoint = function (t) {
// trace the arc as t ranges from 0 to 1
var segment = (0 - Math.PI*2) *t;
return new THREE.Vector3( Math.cos(segment), Math.sin(segment), 0);
};

 var geomet = new THREE.TubeBufferGeometry( path, 10, 0.2, 12, false );
 var mesh = new THREE.Mesh( geomet, mat );
 scene.add( mesh );

从tubeGeometry()上面也可以单独绘制,但是使用" path"由该曲线示例制作。我怎样才能使用四面体中的顶点来创建" path"传递给tubegeometry()?

可能是一个创建"段向量的函数"从顶点? 我认为它还需要曲线/路径的其他属性? 我现在非常坚持。

非常感谢任何帮助,建议或示例! 感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试为每条边创建TubeGeometry。生成LineCurve3作为输入路径。使用边的顶点作为线的起始和结束向量。

考虑使用类似“三角线”的替代方法,以便可视化大于1的linewidth网格的线框。使用three.js的下一个版本({{1} })有新的行原语。演示:

https://rawgit.com/mrdoob/three.js/dev/examples/webgl_lines_fat.html

这种方法比使用R91绘制一堆网格要高得多。