我正在为可视化项目编写跟踪线函数,该项目需要在时间步长值之间跳转。我的问题是,在渲染过程中,使用THREE.js的BufferGeometry和setDrawRange方法创建的线只有在线的原点位于摄像机视图中时才可见。平移将导致线条消失并向线条原点(通常为0,0,0)平移将使其再次出现。这有什么理由和解决方法吗?我试过玩渲染设置。
我所包含的代码正用于测试,并随着时间的推移绘制对象的痕迹。
var traceHandle = {
/* setup() returns trace-line */
setup : function (MAX_POINTS) {
var lineGeo = new THREE.BufferGeometry();
//var MAX_POINTS = 500*10;
var positions = new Float32Array( MAX_POINTS * 3 ); // 3 vertices per point
lineGeo.addAttribute('position', new THREE.BufferAttribute(positions, 3));
var lineMaterial = new THREE.LineBasicMaterial({color:0x00ff00 });
var traceLine = new THREE.Line(lineGeo, lineMaterial);
scene.add(traceLine);
return traceLine;
},
/****
* updateTrace() updates and draws trace line
* Need 'index' saved globally for this
****/
updateTrace : function (traceLine, obj, timeStep, index) {
traceLine.geometry.setDrawRange( 0, timeStep );
traceLine.geometry.dynamic = true;
var positions = traceLine.geometry.attributes.position.array;
positions[index++]=obj.position.x;
positions[index++]=obj.position.y;
positions[index++]=obj.position.z;
// required after the first render
traceLine.geometry.attributes.position.needsUpdate = true;
return index;
}
};
非常感谢!
答案 0 :(得分:2)
可能,边界球体未定义或半径为零。由于您是动态添加点,因此可以设置:
traceLine.frustumCulled = false;
另一个选择是确保边界球是最新的,但考虑到你的用例,这似乎太计算了。
three.js r.73