javascript - 在vue组件中导入并使用three.js库

标签 javascript import vue.js three.js shared-libraries

谁能解释一下我如何正确在 vue 组件中导入和使用 three.js 库?

经过多次搜索,我很清楚大多数人使用以下行在 vue 组件中导入 three.js,但是我认为它已经过时(用于较旧的 three.js 文档在旧的 vue 版本中使用)。

import * as THREE from './js/three.js';

不幸的是,这似乎对我不起作用,因为我在之后编译我的 vue 项目时收到以下警告。 (请注意,该项目实际上没有正确编译,当我浏览到它时得到一个空文件)。 enter image description here

我尝试了很多其他常见的方法来导入 three.js 也没有用!

我根本不是 Vue 专家,但 three.js 包含以下带有导出的代码块,我认为这可能会影响我需要导入此库以避免编译警告的方式。

exports.WebGLRenderTargetCube = WebGLRenderTargetCube;
exports.WebGLRenderTarget = WebGLRenderTarget;
exports.WebGLRenderer = WebGLRenderer;
exports.ShaderLib = ShaderLib;
exports.UniformsLib = UniformsLib;
exports.UniformsUtils = UniformsUtils;
exports.ShaderChunk = ShaderChunk;
exports.FogExp2 = FogExp2;
exports.Fog = Fog;
exports.Scene = Scene;
(and so one...)


The complete Vue component file用于我的项目。

最佳答案

适合只想尝试基本设置的任何人。这是 vue 组件“ThreeTest”中的 three.js 示例。使用 vue-cli 'vue 进行项目设置 init webpack ProjectName', 'cd ProjectName', 'npm install three --save' 并用这个替换 'HelloWorld' 组件:

<template>
    <div id="container"></div>
</template>

<script>
import * as Three from 'three'

export default {
  name: 'ThreeTest',
  data() {
    return {
      camera: null,
      scene: null,
      renderer: null,
      mesh: null
    }
  },
  methods: {
    init: function() {
        let container = document.getElementById('container');

        this.camera = new Three.PerspectiveCamera(70, container.clientWidth/container.clientHeight, 0.01, 10);
        this.camera.position.z = 1;

        this.scene = new Three.Scene();

        let geometry = new Three.BoxGeometry(0.2, 0.2, 0.2);
        let material = new Three.MeshNormalMaterial();

        this.mesh = new Three.Mesh(geometry, material);
        this.scene.add(this.mesh);

        this.renderer = new Three.WebGLRenderer({antialias: true});
        this.renderer.setSize(container.clientWidth, container.clientHeight);
        container.appendChild(this.renderer.domElement);

    },
    animate: function() {
        requestAnimationFrame(this.animate);
        this.mesh.rotation.x += 0.01;
        this.mesh.rotation.y += 0.02;
        this.renderer.render(this.scene, this.camera);
    }
  },
  mounted() {
      this.init();
      this.animate();
  }
}
</script>

<style scoped>
    //TODO give your container a size.
</style>

关于javascript - 在vue组件中导入并使用three.js库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849626/

相关文章:

vue.js - 从模板访问 vue vuex 命名空间的 getter

javascript - 正则表达式保护(绕过 XSS 或开放重定向)- Javascript

javascript - Angular JS - 文本框未在独立范围内更新

objective-c - IOS - 使用 #import 类的正确方法

vue.js - Webpack +SCSS错误: "Module parse failed: Unexpected character ' @' (1:0)"

laravel - 用空字符串替换 NULL 值 Vue

javascript - 如何根据网速播放 gif 或视频?

javascript - 我应该使用 $rootScope 来存储只需要进行一次的 http 请求吗

java - 批量导入NEO4J配置错误

mongodb - 无法导入mongodb