如何加载一次模型并将其存储到变量中
How to load a model once and store it to a variable?
我在加载这样的模型时遇到了一个问题:
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5); });
并像这样使用它:
function addMorphTree(geometry,material,scale){
mat=new THREE.MeshFaceMaterial( material );
mat.side=THREE.DoubleSide;
Tree = new THREE.Mesh( geometry,mat);
Tree.scale.set(scale,scale,scale);
//Tree.position.set(x,y,z);
Tree.rotation.x = Math.PI/2;
//scene.add( Tree );
return Tree;}
我的问题是如何使用这个变量来创建模型的副本,而不是每次都加载它?当我尝试使用时
scene.add(Beech);
在装载机外面,模型没有出现。我看到了其他类似的问题,但所有的答案都是在加载器中使用scene.add。
我认为,当您尝试将模型添加到加载程序之外时,模型没有显示在场景中的原因是因为加载是异步完成的。这意味着,当加载程序正在加载时,其余的代码将运行。因此,如果你试图在加载功能之后直接将"Beech"添加到场景中,它还没有完成加载。
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5); });
scene.add(Beech); // <-- this will run before the function above is finished,
//thereby adding a undefined variable to the scene.
如果您想要多个变量实例,也许您可以尝试clone()函数。由于Beech是一个Mesh对象,并且Mesh继承自Object3D,因此它也可以使用Object3D成员函数。
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5);
for(var i=0;i<5;i++){
scene.add(Beech.clone()) //creates 5 trees
}
});
相关文章:
- 使用javascript存储变量的最安全方式
- 如何在Javascript中为不同的页面访问存储变量
- Javascript 会话存储变量未正确保存
- 服务中的角度存储变量
- 在文本字段中显示保存的本地存储变量 - javascript
- 带有本地存储变量的 jQuery 循环不起作用
- 单击“在时间存储变量”按钮,以便在触发 ajaxComplete 事件时使用
- 页面刷新后的 Javascript 存储变量
- 如何存储变量中单击的子项
- 如何获取不同选项卡的实例,以便我可以存储变量/执行特定于各个选项卡的操作
- 如何使用 jquery 使用本地存储变量设置输入字段
- 无法检索本地存储变量
- 显示本地存储变量
- HTML5会话存储:变量未存储在<李>onclick属性
- 在HTML或Javascript中,如何为每个人存储变量
- SeleniumIDE替换存储变量中的字符串
- JQuery设置本地存储变量
- 在服务AngularJS中存储变量
- 如何使用存储变量和随机数与硒ide
- 计算器Javascript/Jquery存储变量