Three.js - 如何获得指定图层上的THREE.ArrowHelper?
问题描述:
我是Three.js的新手,试图弄清楚如何将事物放在不同的图层上。Three.js - 如何获得指定图层上的THREE.ArrowHelper?
我有一个Arrowhelper,其被初始化,被配置和添加到场景中这样的:
var arrowLeft = new THREE.ArrowHelper(direction, center, length, 0x884400);
arrowLeft.layers.set(1);
scene.add(arrowLeft);
我也有一个网状它获取字体和THREE.MeshPhongMaterial:
var loader = new THREE.FontLoader();
loader.load('fonts/helvetiker_bold.typeface.json', function (font) {
var textGeo = new THREE.TextGeometry("My Text", {
font: font,
size: 1 * globalScale,
height: 0.01,
curveSegments: 12
});
var textMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000 });
var mesh = new THREE.Mesh(textGeo, textMaterial);
mesh.layers.set(1);
mesh.position.set(2, 0, zPos);
scene.add(mesh);
});
我的渲染功能如下:
function render()
{
camera.layers.set(1);
renderer.render(scene, camera);
controls.update();
}
我所看到的一个结果是唯一的目但不是箭头。我究竟做错了什么? 使用console.log记录箭头对象,告诉我它位于第1层并且可见。
当我改变渲染功能:
function render()
{
camera.layers.set(0);
renderer.render(scene, camera);
controls.update();
}
...只有箭头所示。 我正在使用three.js修订版本85.
答
ArrowHelper
0123实例化带有子级的对象,因此您需要为层次结构中的每个对象设置图层。 layers
属性不被继承。
使用一种模式像这样的:
light.layers.set(0); // don't forget to set the light layers
light.layers.enable(1);
mesh.layers.set(1);
arrowHelper.traverse(function(node) { node.layers.set(1); });
camera.layers.set(1);
three.js所r.85
这工作!太棒了,谢谢你! – Verun