Javascript 是否从直线中删除线段?
我正试图用three.js做一件特别的事情,我花了很长时间才弄明白我是应该从头开始,还是在正确的轨道上 我正在解析一个gcode文件,它本质上是一个巨大的文本文件,其中包含了3D打印机的位置和拉伸数据。我按顺序阅读并将所有位置加载到Javascript 是否从直线中删除线段?,javascript,three.js,Javascript,Three.js,我正试图用three.js做一件特别的事情,我花了很长时间才弄明白我是应该从头开始,还是在正确的轨道上 我正在解析一个gcode文件,它本质上是一个巨大的文本文件,其中包含了3D打印机的位置和拉伸数据。我按顺序阅读并将所有位置加载到THREE.Geometry()中作为顶点,然后使用所有这些位置和顶点颜色创建一条线 下面是它的样子: var vis = new Visualizer(); vis.init(); if (typeof geometryArr == 'object' &&
THREE.Geometry()
中作为顶点,然后使用所有这些位置和顶点颜色创建一条线
下面是它的样子:
var vis = new Visualizer();
vis.init();
if (typeof geometryArr == 'object' && geometryArr[0] != undefined) {
colorScheme = [ "#0000ff", "#00ff00", "#d3d3d3", "#ff0000" ];
var lastGeo = [0, 0, 0, false, 0];
var currentGeo = [];
var geometry = new THREE.Geometry();
var lineMat = new THREE.LineBasicMaterial({
color: 0xffffff,
vertexColors: THREE.VertexColors,
transparent: true,
opacity: 1.0,
});
geometryArr.map(function(points, i) {
currentGeo = points;
if (currentGeo[3] == true && lastGeo[3] == true) {
geometry.vertices.push( new THREE.Vector3( currentGeo[0], currentGeo[1], currentGeo[2] ) );
geometry.colors.push( new THREE.Color ( colorScheme[ currentGeo[4] ] ) );
lastGeo = currentGeo;
} else {
lastGeo = currentGeo;
}
});
line = new THREE.Line( geometry, lineMat, THREE.LineSegments );
vis.scene.add(line);
}
vis.render();
vis.animate();
基本上,我知道哪些顶点对应该是不可见的(geometryArr
有一个用于这类事情的标志),所以我知道需要注意哪些顶点对
我所尝试的:
*移除有问题的垂直线对-无论如何,只需在下一组顶点之间画一条线
*有第二条线,在应该的位置有一组透明(0不透明度)的线段-它们不可见并且没有效果(谁会发出砰砰声?)
*单独绘制每个线段-在尝试渲染20000个线段后,我的计算机几乎恢复到室温,然后在修改后再渲染20000个线段(总共40000个!),性能下降到爬行状态。不是期望的结果
我希望THREE.Geometry
和THREE.Line
具有某种功能,可以从一条直线上删除特定的线段,但它有吗
PS.如果没有,并且已经确认,我可能会将其移动到
THREE.BufferGeometry
,并使用着色器将某些线渲染为不可见。可能需要一段时间,希望避免走那么远
多谢各位 在three.js中,使用几何图形绘制直线有两种方法
THREE.LineSegments
类将每两个后续顶点连接一条线。所以如果你想要一个连续的类,你需要复制中间的点。
以下是一个例子:
v1 = new THREE.Vector3( 0, 0, 0 );
v2 = new THREE.Vector3( 10, 0, 0 );
v3 = new THREE.Vector3( 20, 0, 0 );
v4 = new THREE.Vector3( 30, 0, 0 );
如果使用这些点并使用三条线段创建几何图形:
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v3, v4 );
line = new THREE.LineSegments( geometry );
它将如下所示:
.__. .__.
1 2 3 4
.__.__.__.
1 2 3 4
如果您这样做:
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v2, v3, v3, v4 );
line = new THREE.LineSegments( geometry );
它将如下所示:
.__. .__.
1 2 3 4
.__.__.__.
1 2 3 4
三号线
THREE.Line
类的行为不同,它将始终用一条连续线连接所有顶点
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v3, v4 );
line = new THREE.Line( geometry );
将绘制一条连接顶点数组中的点的连续线:
.__.__.__.
1 2 3 4
我希望这将帮助您解决您的问题。在three.js中,有两种方法可以使用几何体绘制直线
THREE.LineSegments
类将每两个后续顶点连接一条线。所以如果你想要一个连续的类,你需要复制中间的点。
以下是一个例子:
v1 = new THREE.Vector3( 0, 0, 0 );
v2 = new THREE.Vector3( 10, 0, 0 );
v3 = new THREE.Vector3( 20, 0, 0 );
v4 = new THREE.Vector3( 30, 0, 0 );
如果使用这些点并使用三条线段创建几何图形:
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v3, v4 );
line = new THREE.LineSegments( geometry );
它将如下所示:
.__. .__.
1 2 3 4
.__.__.__.
1 2 3 4
如果您这样做:
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v2, v3, v3, v4 );
line = new THREE.LineSegments( geometry );
它将如下所示:
.__. .__.
1 2 3 4
.__.__.__.
1 2 3 4
三号线
THREE.Line
类的行为不同,它将始终用一条连续线连接所有顶点
geometry = new THREE.Geometry();
geometry.vertices.push( v1, v2, v3, v4 );
line = new THREE.Line( geometry );
将绘制一条连接顶点数组中的点的连续线:
.__.__.__.
1 2 3 4
我希望这将帮助您解决您的问题。如果我能完全理解您的问题,我想我可以帮助您。为什么要首先添加这些顶点?你能不能先跳过将它们添加到几何体中?@Wilt:如果不清楚,我表示歉意-我将顶点添加到一个
THREE.geometry
对象中,因为在那之前,它只是一个用X Y Z信息构建的数组。除非有更好的方法来划清界限和/或其他什么?我理解这一部分。但还有一部分我不知道:你在几何体中添加了一些点,你想再次删除这些点,对吗?但是为什么不先跳过添加它们呢?我不知道你的问题在哪里…@威尔特:我发现即使不将它们添加到几何体中,并使用该几何体,也会在它们之间画出线。但是现在它只使用我删除的点之前和之后的点。你使用的是什么版本的three.js?如果我能完全理解你的问题,我想我可以帮你。为什么要首先添加这些顶点?你能不能先跳过将它们添加到几何体中?@Wilt:如果不清楚,我表示歉意-我将顶点添加到一个THREE.geometry
对象中,因为在那之前,它只是一个用X Y Z信息构建的数组。除非有更好的方法来划清界限和/或其他什么?我理解这一部分。但还有一部分我不知道:你在几何体中添加了一些点,你想再次删除这些点,对吗?但是为什么不先跳过添加它们呢?我不知道你的问题在哪里…@威尔特:我发现即使不将它们添加到几何体中,并使用该几何体,也会在它们之间画出线。但是现在它只使用我删除的点之前和之后的点。你使用的是什么版本的three.js?太棒了,谢谢你的回答。我将尝试一下,我很确定这就是它,但需要澄清的是:我应该在几何体中添加成对的顶点,并使用3.LineSegments
来连接所有这些对?@JonLim就是这样!工作得很漂亮!我必须对我的代码做更多的调整,否则这太棒了。非常感谢你!太棒了,谢谢你的回答。我将尝试一下,我很确定这就是它,但需要澄清的是:我应该在几何体中添加成对的顶点,并使用3.LineSegments
来连接所有这些对?@JonLim就是这样!工作得很漂亮!我必须对我的代码做更多的调整,否则这太棒了。谢谢你