我正在尝试使用 Three.js STLLoader 从 STL 文件中读取和缓存几何图形。我正在使用事件循环回调来获取数据(类似于 STLLoader 示例)。我打算存储在外部变量“cgeom”中。但是,看起来几何在事件 CB 之外不可用并且 cgeom 未定义(运行时错误:cgeom 未定义)。有人能告诉我我在那里做错了什么(代码如下):
<!DOCTYPE html>
<html>
<head>
<title>Thee.js STL geometry caching test</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body>
<script src="js/three.min.js"></script>
<script src="js/STLLoader.js"></script>
<script>
alert("We'are here");
var cgeom;
function load_geometry( stl_file ) {
var loader = new THREE.STLLoader();
loader.addEventListener( 'load', function ( event ) {
cgeom = event.content;
alert('inside listener - vertices: ' + cgeom.vertices.length);
} );
loader.load(stl_file);
alert('inside load_geometry - vertices: ' + cgeom.vertices.length); // error - cgeom is not defined
}
load_geometry('./data/a90.stl');
alert('inside load_geometry - vertices: ' + cgeom.vertices.length); // error - cgeom is not defined
</script>
</body>
</html>
所有示例都从几何体创建网格并将其立即添加到场景中。那不是我想要的。我需要稍后添加它,以替换场景中的另一个网格。这就是为什么我想先缓存它。
提前谢谢你,西蒙
PS 我不是 JS 专家,但有 10 年以上的 c++ 和 java 经验。