gpt4 book ai didi

javascript - 如何在 STLLoader 甚至监听器之外缓存 STL 几何图形

转载 作者:行者123 更新时间:2023-11-28 09:08:32 30 4
gpt4 key购买 nike

我正在尝试使用 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>

所有示例都从几何体创建网格并将其立即添加到场景中。那不是我想要的。我需要稍后添加它,以替换场景中的另一个网格。这就是为什么我想先缓存它。

预先感谢您,西蒙

附注我不是 JS 专家,但拥有 10 多年的 c++ 和 java 经验。

最佳答案

cgeom 仅在执行事件处理程序后才有值(value)。所有代码都会立即运行,除了:

       loader.addEventListener( 'load', function ( event ) {
cgeom = event.content;
alert('inside listener - vertices: ' + cgeom.vertices.length);
} );

因此,您需要等待几何图形加载(此回调运行),然后才能尝试使用它。

关于javascript - 如何在 STLLoader 甚至监听器之外缓存 STL 几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589196/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com