gpt4 book ai didi

javascript - Three.js Uncaught TypeError : Cannot read property 'addEventListener' of undefined

转载 作者:行者123 更新时间:2023-12-05 02:51:21 25 4
gpt4 key购买 nike

JS 库 three.js 和 OrbitControls.js 有问题。根据本教程完成所有操作:

https://redstapler.co/add-3d-model-to-website-threejs/

但它不起作用,在控制台中它给出了以下错误:

未捕获的类型错误:无法读取未定义的属性“addEventListener”

 at new THREE.OrbitControls (OrbitControls.js: 1125)
at init (index.html: 25)
at index.html: 64
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8 />
<link rel="stylesheet" type="text/css" href="css/styles.css" />
</head>
<body>
<script src="/js/three.min.js"></script>
<script src="js/GLTFLoader.js"></script>
<script src="js/OrbitControls.js"></script>
<script>
let scene, camera, renderer;
function init() {
scene = new THREE.Scene();
scene.background = new THREE.Color(0xdddddd);

camera = new THREE.PerspectiveCamera(40,window.innerWidth/window.innerHeight,1,5000);
camera.rotation.y = 45/180*Math.PI;
camera.position.x = 800;
camera.position.y = 100;
camera.position.z = 1000;

controls = new THREE.OrbitControls(camera);
controls.addEventListener('change', renderer);

hlight = new THREE.AmbientLight (0x404040,100);
scene.add(hlight);

directionalLight = new THREE.DirectionalLight(0xffffff,100);
directionalLight.position.set(0,1,0);
directionalLight.castShadow = true;
scene.add(directionalLight);
light = new THREE.PointLight(0xc4c4c4,10);
light.position.set(0,300,500);
scene.add(light);
light2 = new THREE.PointLight(0xc4c4c4,10);
light2.position.set(500,100,0);
scene.add(light2);
light3 = new THREE.PointLight(0xc4c4c4,10);
light3.position.set(0,100,-500);
scene.add(light3);
light4 = new THREE.PointLight(0xc4c4c4,10);
light4.position.set(-500,300,500);
scene.add(light4);

renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);

let loader = new THREE.GLTFLoader();
loader.load('models/scene.gltf', function(gltf){
car = gltf.scene.children[0];
car.scale.set(0.5,0.5,0.5);
scene.add(gltf.scene);
animate();
});
}
function animate() {
renderer.render(scene,camera);
requestAnimationFrame(animate);
}
init();
</script>
</body>
</html>

请帮忙!

最佳答案

您的代码中存在一些问题:

  • 如果您根据 OrbitControlschange 事件按需呈现,则不需要动画循环。
  • OrbitControls 的第二个 ctor 参数是必需的。它通常是 renderer.domElement,这意味着您必须在控件之前创建渲染器。
  • 您不能将renderer 用作事件监听器。它应该是一个 render() 函数。

let scene, camera, renderer;

init();
render();

function init() {
scene = new THREE.Scene();
scene.background = new THREE.Color(0xdddddd);

camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 0.1, 5000);
camera.position.x = 8;
camera.position.y = 10;
camera.position.z = 10;

renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.addEventListener('change', render);

const hlight = new THREE.AmbientLight(0x404040, 100);
scene.add(hlight);

const directionalLight = new THREE.DirectionalLight(0xffffff, 100);
directionalLight.position.set(0, 1, 0);
directionalLight.castShadow = true;
scene.add(directionalLight);

const light = new THREE.PointLight(0xc4c4c4, 10);
light.position.set(0, 300, 500);
scene.add(light);
const light2 = new THREE.PointLight(0xc4c4c4, 10);
light2.position.set(500, 100, 0);
scene.add(light2);
const light3 = new THREE.PointLight(0xc4c4c4, 10);
light3.position.set(0, 100, -500);
scene.add(light3);
const light4 = new THREE.PointLight(0xc4c4c4, 10);
light4.position.set(-500, 300, 500);
scene.add(light4);

const geometry = new THREE.BoxBufferGeometry();
const material = new THREE.MeshPhongMaterial();
const mesh = new THREE.Mesh( geometry, material )
scene.add( mesh );

}

function render() {
renderer.render(scene, camera);
}
body {
background-color: #000;
margin: 0px;
overflow: hidden;
}
<script src="https://cdn.jsdelivr.net/npm/three@0.116.1/build/three.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.116.1/examples/js/controls/OrbitControls.js"></script>

关于javascript - Three.js Uncaught TypeError : Cannot read property 'addEventListener' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63154673/

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