Three.js的新手,我正在关注文档,当涉及到这一点时:
function animate(renderer, scene, camera, cube) {
requestAnimationFrame( animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render( scene, camera );
}
function init() {
var scene = new THREE.Scene(); //setup scene
var camera = new THREE.PerspectiveCamera(75, window.innerWidth /
window.innerHeight, 0.1, 1000);//setup camera; 75= fov is the extent of the scene
that is seen on the display at any given moment; il rapporto è l'asect ratio;
var renderer = new THREE.WebGLRenderer();//setup renderer;renderer istance;
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var geometry = new THREE.BoxGeometry(1, 1 , 1); //thisobject that contains all
the points;
var material = new THREE.MeshBasicMaterial({ color:0x00ff00 }); // to color it;
var cube = new THREE.Mesh( geometry, material); // object that takes a geometry
and applies a material it;
console.log(cube);
scene.add(cube);
camera.position.z = 5; // move the camera a little bit from the cube,
animate(renderer, scene, camera, cube);
}
window.onload = init;
我正在尝试加载对象,然后对其执行旋转操作,但是报告了错误。对象加载正常,但报告许多相同的错误。我已经研究了这个问题,并且了解到它可能与对象的异步加载有关,但是我只是想不通这对我的应用
答案 0 :(得分:0)
我已经研究了这个问题,并且了解到它可能与对象的异步加载有关
您的问题与异步加载无关,因为您不是从后端加载资产。
实际的问题是您在cube
函数内部声明了init()
。因此,该变量在animate()
中不可见。解决方案是在两个函数之外声明cube
。
答案 1 :(得分:0)
要弄清楚@ Mugen87的答案,您不需要将整个定义移到外面,只需将变量声明移到外面。
var cube = null
function animate(){
// ...
}
function init(){
// ...
cube = new THREE.Mesh( geometry, material );
// ...
}
JavaScript在功能上是作用域的,这意味着其变量的作用域仅限于定义它们的函数(包括在同一作用域中定义的任何函数)。