Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js:使用RawShaderMaterial渲染线框线段_Javascript_Three.js - Fatal编程技术网

Javascript Three.js:使用RawShaderMaterial渲染线框线段

Javascript Three.js:使用RawShaderMaterial渲染线框线段,javascript,three.js,Javascript,Three.js,我正在制作一个将一些三个.LineSegments渲染为线框的。现在我想慢慢移动LineSegments材质中的顶点(在上面的场景中,该对象名为warehouse),但我不知道如何在THREE.RawShaderMaterial中渲染我的LineSegments线框 我发现缓慢移动顶点的最简单方法是使用RawShaderMaterial,为该几何体提供currentPosition和targetPosition属性,并使用transitionPercent统一控制渲染顶点位置中每个位置的混合:

我正在制作一个将一些
三个.LineSegments
渲染为线框的。现在我想慢慢移动LineSegments材质中的顶点(在上面的场景中,该对象名为
warehouse
),但我不知道如何在
THREE.RawShaderMaterial
中渲染我的LineSegments线框

我发现缓慢移动顶点的最简单方法是使用
RawShaderMaterial
,为该几何体提供currentPosition和targetPosition属性,并使用transitionPercent统一控制渲染顶点位置中每个位置的混合:

vec3 pos = mix(currentPosition, targetPosition, transitionPercent)
但是,当我尝试为上面场景中的仓库使用RawShaderMaterial时,我丢失了仓库上的线框几何体,因为在RawShaderMaterial上设置wireframe=true与在LineBasicMaterial上的效果不同

我尝试了一些方法来创建线框几何体,可以将其传递给我的RawShaderMaterial,例如:

var g1 = new THREE.BufferGeometry();
g1.addAttribute('position', new THREE.BufferAttribute(positions, 3));
var g2 = new THREE.Geometry().fromBufferGeometry(g1),
    wireframe = new THREE.WireframeGeometry(g2),
    geometry = new THREE.BufferGeometry().fromGeometry(wireframe);
但所有的尝试都未能解开这个秘密

有人知道如何使用RawShaderMaterial将上面的仓库对象渲染为线框吗?我非常感谢其他人在这个问题上提供的任何帮助


顺便说一下,我把这个贴在了,但是我在这里交叉贴是为了让更多的人关注这个问题。

这可以通过以下方式解决:

var g2 = new THREE.Geometry().fromBufferGeometry(geometry);
var wireframeGeometry = new THREE.WireframeGeometry(g2);
wireframeGeometry.addAttribute('color', new THREE.BufferAttribute(colors, 3));
wireframeGeometry.addAttribute('target', new THREE.BufferAttribute(targets, 3));
wireframeGeometry.addAttribute('alpha', new THREE.BufferAttribute(alphas, 1));
wireframeGeometry.addAttribute('position', new THREE.BufferAttribute(positions, 3));
warehouse = new THREE.LineSegments(wireframeGeometry, shaderMaterial);
shaderMaterial.wireframe = true;
scene.add(warehouse);