【发布时间】:2020-07-08 19:06:41
【问题描述】:
我对 JavaScript 非常陌生,所以据我所知,你们可能会对我的代码感到畏缩。基本上我正在尝试定义通过 Three.js GTLF 加载器导入的模型并将其定义为“模型”,以便我可以使其自动旋转。
我的术语可能与标准不符,但这是我知道如何解释我在做什么以及需要修复什么的唯一方法。
我将链接我的整个代码,但错误在这里很明显:
var model
var modelLoader = new GLTFLoader().setPath( 'models/DamagedHelmet/' );
modelLoader.load( 'DamagedHelmet.gltf', function ( gltf ) {
model = gltf.scene;
gltf.scene.traverse( function ( child ) {
if ( child.isMesh ) {
roughnessMipmapper.generateMipmaps( child.material );
}
} );
scene.add(model);
roughnessMipmapper.dispose();
render();
} );
我只将对象定义为model,所以对象会自动不断旋转,我在这里尝试这样做,下面几行代码:
function render() {
renderer.render( scene, camera );
model.rotation.x += 0.01;
model.rotation.y += 0.005;
}
可能有一些非常明显的事情我错过了或做错了。我在网上找到的所有解决方案似乎只有在没有通过模块导入 Javascript 时才有效。 (至少这是我的猜测)
大家好。
【问题讨论】:
-
您的代码有两个问题。 1)
render函数看不到您的model变量,请将其定义在声明函数的外部范围内。 2)GLTFLoader异步加载模型,直到模型完全加载model未定义。这意味着您的model.rotation.x也会返回错误,请在旋转之前检查model是否未定义。 -
@ScieCode 如果你解释一下我会怎么做,可以吗?抱歉,我真的是 JavaScript 新手
-
一种简单的方法是在全局范围内声明
var model;,然后它将可用于所有函数。对于旋转部分,只需检查if ( model !== undefined ),然后继续旋转。 -
eloquentjavascript.net 强烈推荐这本关于 Javascript 的书。它涵盖了非常重要的 javascript 概念,如变量/函数范围、提升和闭包。
标签: javascript three.js reference definition