TypeError при попытке импортировать OrbitControls. Что мне делать?

Я получаю эту ошибку при попытке импортировать OrbitControls

ЯС:

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({color: 0x00ff00});
const cube = new THREE.Mesh(geometry, material);
const controls = new OrbitControls(camera, renderer.domElement);

renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

scene.add(cube);

camera.position.set(0, 20, 100);
camera.position.z = 5;

renderer.render(scene, camera);

controls.update();

function animate(){
    requestAnimationFrame(animate);

    controls.update();

    renderer.render(scene, camera);
}

HTML:

<!DOCTYPE html>
<html lang = "en">
    <head>
        <meta charset = "utf-8">
        <title>Document</title>
        <style>
            body { margin: 0; }
        </style>
    </head>
    <body>
        <script src = "https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js" ></script>
        <script type = "module" src = "task9.js"></script>
    </body>
</html>

Я пробовал использовать другой импорт; импортировать { OrbitControls } из 'three/addons/controls/OrbitControls.js'; и импортировать { OrbitControls } из «https://unpkg.com/[email protected]/examples/jsm/controls/OrbitControls.js»; Ни один из них не работает

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
77
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

импортировать OrbitControls из '../three/examples/jsm/controls/OrbitControls'

Попробуйте это, это может решить вашу проблему.

В полученной ошибке говорится, что путь к OrbitControls должен быть абсолютным, а не относительным. Вот отличия. В двух словах: вам просто нужно заменить путь к OrbitControls на «./three/examples/jsm/controls/OrbitControls» или «/home/&USER/path/to/OrbitControls».

Когда я меняю импорт на это, я получаю новую ошибку: GET 127.0.0.1:5500/three/examples/jsm/controls/OrbitControls net::ERR_ABORTED 404 (не найдено)

Taric_112 31.05.2024 14:35
Ответ принят как подходящий

Попробуйте этот подход. Кстати, в вашем коде есть пара проблем…

  1. Не дублируйте настройки камеры.
  2. Инициализируйте OrbitControls после рендеринга.
  3. Добавьте немного света в сцену.
  4. Удалите ненужное controls.update();
  5. Вызов цикла анимации.

Эта версия работает нормально:

import * as THREE from "https://esm.sh/three";
import { OrbitControls } from "https://esm.sh/three/examples/jsm/controls/OrbitControls";
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({color: 0x00ff00});
const cube = new THREE.Mesh(geometry, material);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

scene.add(cube);

camera.position.z = 5;
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
controls.enabled = true;

function animate() {
    requestAnimationFrame(animate);
    controls.update();
    renderer.render(scene, camera);
}
animate();

Посмотрите также эти темы:

https://discourse.threejs.org/t/cant-find-threejs-and-threejs-min-js-file/65270/3

Three.js ломается при попытке импортировать OrbitControls.js

Другие вопросы по теме