Ошибка «Объект не определен» при попытке повернуть объект в three.js

Опубликовано: 24 Февраля, 2023

В этой статье мы увидим «Uncaught TypeError: невозможно прочитать свойства undefined (чтение «поворот») при анимации». Это ошибка типа для переменной . В Three .js эта ошибка возникает, когда переменная объявлена, но значение не присвоено или значение не определено. Мы можем наблюдать по ошибке, сообщение о том, что эта ошибка произошла, когда переменная была вызвана для изменения поворота, чтобы анимировать .

Переменная здесь является экземпляром THREE.Object3D .

Пример: В этом примере создается показанная выше ошибка, т.е. «Uncaught TypeError: Не удается прочитать свойства неопределенного (чтение «поворот») при анимации».

Это код three.js, который создает конус с вращением по осям x и y . Здесь имя переменной 'cone' было объявлено , но не присвоено 3D-объекту . Из-за этого, когда мы пытаемся получить доступ к ключу поворота переменной, он не может его прочитать, следовательно, показывает ошибку.

HTML




<!DOCTYPE html>
<html>
  
<head>
    <meta charset="utf-8">
    <title>
        Solving errors with
        geeksforgeeks in three.js
    </title>
  
    <script src="three.js"></script>
</head>
  
<body>
    <script>
  
        // Adding scene and camera 
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera(
            75, window.innerWidth / window.innerHeight, 
            0.1, 1000);
  
        // Adding rendering 
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, 
                window.innerHeight);
        document.body.appendChild(renderer.domElement);
  
        // Creating a cone geometry, and material. 
        const geometry = new THREE.ConeGeometry();
        const material = new THREE.MeshBasicMaterial({
            color: "purple"
        });
  
        // Declaring Variable
        let cone;
  
        // Adding cone to the scene. 
        scene.add(cone);
  
        camera.position.z = 7;
  
        // Writing an animate() function. 
        function animate() {
            requestAnimationFrame(animate);
  
            // Cone not assigned, with a 
            // 3D object but still trying 
            // to rotate an, undefined object.
            cone.rotation.x += 0.01;
            cone.rotation.y += 0.01;
            renderer.render(scene, camera);
        };
        animate();
    </script>
</body>
  
</html>

Выход:

Чтобы решить эту ошибку, нам нужно создать сетку, которая объединяет геометрию и материал, объявленные ранее. Функция Mesh назначается переменной 'cone' , поэтому ошибка удаляется. Присвоенное значение: «новый THREE.Mesh (геометрия, материал)».

Пример: приведенный ниже пример устраняет ошибку, присваивая значение 'cone' .

HTML




<!DOCTYPE html>
<html>
  
<head>
    <meta charset="utf-8">
    <title>
        Solving errors with
        geeksforgeeks in three.js
    </title>
  
    <script src="three.js"></script>
</head>
  
<body>
    <script>
  
        // Adding scene and camera 
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera(
            75, window.innerWidth / window.innerHeight, 
            0.1, 1000);
  
        // Adding rendering 
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);
  
        // Creating a cone geometry, and material. 
        const geometry = new THREE.ConeGeometry();
        const material = new THREE.MeshBasicMaterial({
            color: "purple"
        });
  
        // Declaring variable and assigning its value
        const cone = new THREE.Mesh(geometry, material);
  
        // Adding cone to the scene. 
        scene.add(cone);
  
        camera.position.z = 7;
  
        // Writing an animate() function. 
        function animate() {
            requestAnimationFrame(animate);
  
            // Adding rotations, in x and y direction,
            // in the cone.
            cone.rotation.x += 0.01;
            cone.rotation.y += 0.01;
  
            renderer.render(scene, camera);
        };
        animate();
    </script>
</body>
  
</html>

Выход: