我正在尝试在要构建的Forge Viewer应用程序中向3D模型的场景中添加一些线条。我想在某些对象周围画一些边界框。我已将以下指南用作基准:
Getting bounding boxes of each component in the viewer
目前,我仅使用drawLines函数,因为我已经有了要在我的代码中其他位置画一个框的对象的坐标数据。但是,当调用scene.add时,控制台中会出现以下错误:
WebGL: INVALID_OPERATION: drawArrays: no buffer is bound to enabled attribute
我查找了此错误,找不到任何可以帮助我的东西。看来问题可能是由于我的应用程序已经在场景中添加了网格物体,并且在添加线时使用了相同的着色器,该着色器没有正确设置属性来处理线。不过,这只是一个猜测,我真的不知道是什么导致了错误,或者我可以采取其他措施来解决该错误。我已经使用sceneAfter等尝试了各种类型的THREE.js对象,但仍然无法在场景中绘制线条。
答案 0 :(得分:0)
您需要像下面这样制作新的材料。
var lineMaterial = new THREE.LineBasicMaterial ({
color: new THREE.Color (0xFF0000),
transparent: true,
depthWrite: false,
depthTest: true,
linewidth: 10,
opacity: 1.0
})
var lines = new THREE.Line (geometry,
lineMaterial)
scene.add (lines)
答案 1 :(得分:0)
如果直接调用drawLines
函数,请确保使用与教程相同的材料类型:
let material = new THREE.LineBasicMaterial({ color: 0xffff00, linewidth: 2 });
viewer.impl.matman().addMaterial('MyLineMaterial', material, true);
drawLines([{x:0,y:0,z:0}, {x:10,y:10,z:10}], material);
答案 2 :(得分:0)
啊哈,设法使其正常工作!为了解决这个问题,我不得不使用createOverlayScene和addOverlay将线的几何形状添加到场景中,而不是使用scene.add,并且必须删除matman()。addMaterial。
答案 3 :(得分:0)
尝试一个新场景---- 只需代码(对不起,我的英语不好)
const geometry = new THREE.Geometry () geometry.vertices.push (new THREE.Vector3 ( 0, 0, 0)) geometry.vertices.push (new THREE.Vector3 (100, 100, 100)) var material = new THREE.LineBasicMaterial({ color: 0x0000ff, linewidth: 2 }); var lines = new THREE.Line (geometry, material) viewer.impl.scene.add (lines)
您需要确保场景可以创建线条。