ThreeJS 中的 OrbitControls 无法使用导入地图

问题描述 投票:0回答:1

我正在尝试获得一个带有 OrbitControls 的简单 ThreeJs,用于平移和缩放。我能够获得旧版本 (128) 的工作示例,但我在使用较新的 r168 时遇到了问题。

在示例中,我尝试将 js 代码直接写入 html 页面,并使用 cdn 导入 Threejs 依赖项,而不是本地源。

<body>
    <script type="importmap">
        {
            "imports": {
                "three": "https://unpkg.com/[email protected]/build/three.module.js",
                "three/examples/jsm/controls/OrbitControls": "https://unpkg.com/[email protected]/examples/jsm/controls/OrbitControls.js"
            }
        }
    </script>
    <script type="module">
        import * as THREE from 'three';
        import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

        // Scene setup
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        
        // Renderer setup
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.setClearColor(0x000000); // Set background color to black
        document.body.appendChild(renderer.domElement);

        // Create a cube
        const geometry = new THREE.BoxGeometry();
        const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        const cube = new THREE.Mesh(geometry, material);
        scene.add(cube);

        // Position the camera
        camera.position.z = 5;

        // OrbitControls setup
        const controls = new OrbitControls(camera, renderer.domElement);
        controls.enableDamping = true; // Enable smooth damping
        controls.dampingFactor = 0.25; // Adjust the damping factor for smoothness
        controls.enableZoom = true;    // Enable zoom
        controls.enablePan = true;     // Enable panning

        // Animation loop
        function animate() {
            requestAnimationFrame(animate);
            controls.update(); // Required if damping is enabled
            renderer.render(scene, camera);
        }
        animate();

        // Adjust canvas on window resize
        window.addEventListener('resize', () => {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        });
    </script>
</body>

代码似乎从一开始就出现错误,在

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
中。

对于可能发生的情况以及如何解决此问题有任何帮助吗?

javascript html three.js
1个回答
0
投票

也许:

<body>
  <script type="importmap">
      {
          "imports": {
              "three": "https://unpkg.com/[email protected]/build/three.module.js",
              "OrbitControls": "https://unpkg.com/[email protected]/examples/jsm/controls/OrbitControls.js"
          }
      }
  </script>
  <script type="module">
      import * as THREE from 'three';
      import { OrbitControls } from 'OrbitControls';

      // Scene setup
      const scene = new THREE.Scene();
      const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
      
      // Renderer setup
      const renderer = new THREE.WebGLRenderer();
      renderer.setSize(window.innerWidth, window.innerHeight);
      renderer.setClearColor(0x000000); // Set background color to black
      document.body.appendChild(renderer.domElement);

      // Create a cube
      const geometry = new THREE.BoxGeometry();
      const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
      const cube = new THREE.Mesh(geometry, material);
      scene.add(cube);

      // Position the camera
      camera.position.z = 5;

      // OrbitControls setup
      const controls = new OrbitControls(camera, renderer.domElement);
      controls.enableDamping = true; // Enable smooth damping
      controls.dampingFactor = 0.25; // Adjust the damping factor for smoothness
      controls.enableZoom = true;    // Enable zoom
      controls.enablePan = true;     // Enable panning

      // Animation loop
      function animate() {
          requestAnimationFrame(animate);
          controls.update(); // Required if damping is enabled
          renderer.render(scene, camera);
      }
      animate();

      // Adjust canvas on window resize
      window.addEventListener('resize', () => {
          camera.aspect = window.innerWidth / window.innerHeight;
          camera.updateProjectionMatrix();
          renderer.setSize(window.innerWidth, window.innerHeight);
      });
  </script>
</body>
© www.soinside.com 2019 - 2024. All rights reserved.