0
我测试使用three.js中的firstpersoncontrols。但在复制示例以了解其工作方式时,我在控制台中始终存在相同的错误:未定义增量。如果你是一个解释:firstpersoncontrols增量未定义
<!-- upload librarie -->
<script src="../THREEJS03/build/three.min.js"></script>
<!-- upload les modes d'interactions -->
<script src="js/controls/FirstPersonControls.js"></script>
<script src="js/loaders/MTLLoader.js"></script>
<script src="js/loaders/OBJMTLLoader.js"></script>
<!-- upload la detection du webgl -->
<script src="js/Detector.js"></script>
<script>
//detection du webgl
if (! Detector.webgl) Detector.addGetWebGLMessage();
var container;
var camera, cubeCamera, controls, scene, renderer;
var clock = new THREE.Clock();
init();
animate();
//////////////////////// SCENE /////////////////////////////////////
function init() {
// scene
camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 0.1, 3000);
camera.position.x = 00;
camera.position.y = 80;
camera.position.z = 00;
controls = new THREE.FirstPersonControls(camera);
controls.movementSpeed = 1000;
controls.lookSpeed = 0.125;
controls.lookVertical = true;
controls.constrainVertical = false;
controls.verticalMin = 1.1;
controls.verticalMax = 2.2;
controls.noFly = true;
scene = new THREE.Scene();
scene.add(camera);
// light
// add ambient lighting
var ambientLight = new THREE.AmbientLight(0x020202);
scene.add(ambientLight);
var pointLight = new THREE.PointLight(0xffffff); //0xffaa00
pointLight.position.x = -300;
pointLight.position.y = 300;
pointLight.position.z = 500;
scene.add(pointLight);
//SKYBOX (only reflexive)
// Cubic Texture
var r = "models/world/";
var urls = [r + "posx.jpg", r + "negx.jpg",
r + "posy.jpg", r + "negy.jpg",
r + "posz.jpg", r + "negz.jpg"];
var textureCube = THREE.ImageUtils.loadTextureCube(urls);
////////////////////////// OBJET ////////////////////////////
var loader = new THREE.OBJMTLLoader();
loader.addEventListener('load', function (event) {
var object = event.content;
object.position.y = 0;
scale = 1;
scene.add(object);
});
loader.load('models/macabann/obj/scene/scene01.obj', 'models/macabann/obj/scene/scene01.mtl');
var material = new THREE.MeshPhongMaterial({
//Environnement
envMap: textureCube,
combine: THREE.MixOperation,
//Color Application
side: THREE.DoubleSide,
shading: THREE.SmoothShading
});
///////////////////// FIN OBJET ///////////////////////
/////////////////// RENDERER //////////////////////
//type de rendu (antialias true or false)
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setClearColorHex(0xf3f3f3, 1);
renderer.shadowMapEnabled = true;
//dimension du rendu
renderer.setSize(window.innerWidth, window.innerHeight);
// create wrapper object that contains three.js objects
container = document.createElement('div');
document.body.appendChild(container);
container.appendChild(renderer.domElement);
///////////////////// FIN RENDERER ///////////////////////
//////////////////// WINDOWS ////////////////////////
window.addEventListener('resize', onWindowResize, false);
}
function onWindowResize() {
camera.aspect = window.innerWidth/window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
controls.handleResize();
}
//////////////////////////FIN WINDOWS //////////////////////
function render() {
var delta = clock.getDelta();
time = clock.getElapsedTime() * 10;
}
function animate() {
requestAnimationFrame(animate);
controls.update(delta);
renderer.render(scene, camera);
}
</script>
感谢到吃茶和答案
好的回应:好的我明白我的错误:我在请求动画帧后放置了var变量,不是吗? a什么是“* 10”?下一步:碰撞 –
对不起,我不完全明白你在问什么。问题在于三角洲被定义为不同的功能。在同一个函数中的顺序没有太大区别,只要你在使用它们之前定义变量:) – yaku
这是问题:我用我的变量来定义她......但没关系......我想这个是防止碰撞沉入地面的功能吗? .. –