threejs加载.Fbx .OBJ 3D模型文件

threejs加载.Fbx .OBJ 3D模型文件

文件下载与启动

threejs官网下载threejs的文件,可以选择直接下载,也可以跳转到GitHub拉取

官网导航

拉取下来的完整文件就是这个样子

threejs完整包

拉取成功后我们在本地安装启动服务,这样就能很快速的查看threejs的各种例子了

npm i -g http-server
http-server

可以先看看官网里的例子,你想要的东西官方里面都有

开始开发

后期在开发的时候需要用到build和jsm文件,我们可以单独放进demo里这样比较方便我们使用

build与jsm

下面我们直接上代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>FBXLoader3D模型展示</title>
    <style>
        body {
            margin: 0;
        }
    </style>
</head>

<body>
    <script type="importmap">
        {
            "imports": {
                "three": "./build/three.module.js"
            }
        }
    </script>
    <script type="module">
        import * as THREE from 'three';
        import Stats from './jsm/libs/stats.module.js';
        import { OrbitControls } from './jsm/controls/OrbitControls.js';
        import { FBXLoader } from './jsm/loaders/FBXLoader.js'

        var container, stats, controls, camera, scene, renderer, light;

        init();
        animate();
        function init() {
            container = document.createElement('div');
            document.body.appendChild(container);
            camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, .2, 1000);
            camera.position.set(0, 1.6, 0);
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0xa0a0a0);
            scene.fog = new THREE.Fog(0xa0a0a0, 200, 1000);
            light = new THREE.HemisphereLight(0xffffff, 0x444444);
            light.position.set(0, 20, 0);
            scene.add(light);
            light = new THREE.DirectionalLight(0xffffff);
            light.position.set(0, 20, 10);
            light.castShadow = true;
            scene.add(light);
            var grid = new THREE.GridHelper(5, 20, 0x000000, 0x000000);
            grid.material.opacity = 0.2;
            grid.material.transparent = true;
            scene.add(grid);
            // model

            var loader = new FBXLoader();
            loader.load('fbx/demo1.fbx', function (object) {
                undefined
                object.traverse(function (child) {
                    undefined
                    if (child.isMesh) {
                        undefined
                        child.castShadow = true;
                        child.receiveShadow = true;
                    }
                });
                object.rotation.y = Math.PI / 2;
                //object.rotation.x = -Math.PI/2 - Math.PI/12;
                object.position.set(0, -0.15, 0.3);
                console.log(object.position);
                object.scale.set(.003, .003, .003);
                scene.add(object);
            });

            renderer = new THREE.WebGLRenderer({ antialias: true });
            renderer.setPixelRatio(window.devicePixelRatio);
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.shadowMap.enabled = true;
            container.appendChild(renderer.domElement);
            controls = new OrbitControls(camera, renderer.domElement);
            controls.target.set(0, 0, 0);
            controls.update();
            window.addEventListener('resize', onWindowResize, false);

            // stats
            stats = new Stats();
            container.appendChild(stats.dom);
        }

        function onWindowResize() {
            undefined
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }

        //

        function animate() {
            undefined
            requestAnimationFrame(animate);
            renderer.render(scene, camera);
            stats.update();
        }
    </script>
</body>
</html>

会不会写不重要,只要你会改就能出来,实在不行,就去看官网里的例子,边学边做,也会让你快速学会的


补充一下我犯的错误与解决方式

像我要加载.fbx模型文件, 那就加载FBXLoader.js文。(.obj模型文件, 那就加载OBJLoader.js文件)

然后是OrbitControls.js 接收的camera参数

我们在引入文件的时候不能直接引入,会出现引入失败

引入报错

最好的引入方法是(看的官网的例子)

正确引入

想看源码的你可以打开FBXLoader.js文件看一下

最后的效果图就是这样的

运行效果

运行是没有问题的,细节部分在不断优化。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 在Vue中3D模型需要使用Three.js库。首先,需要在Vue项目中安装Three.js库。然后,可以使用Three.js提供的Loader3D模型文件,例如OBJFBX、GLTF等格式。完成后,可以将模型到场景中进行渲染。具体的实现可以参考Three.js的官方文档和示例代码。 ### 回答2: 使用vue实现three.js的3D模型需要以下步骤: 1. 安装three.js库 在vue项目中使用three.js需要先安装three.js库。可以通过npm安装: ```npm install three --save``` 安装后,可以通过需要使用three.js的组件中引入库: ```import * as THREE from 'three'``` 2. 创建场景、相机、渲染器 在vue组件内部需要先创建基本的场景、相机和渲染器组件: ```javascript mounted() { //创建场景 this.scene = new THREE.Scene(); //创建相机 this.camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000); //创建渲染器 this.renderer = new THREE.WebGLRenderer({ antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.renderer.setClearColor('#F5F5F5', 1.0); //将渲染器添到页面中 this.$refs.box.appendChild(this.renderer.domElement); } ``` 其中,mounted()生命周期函数是在vue组件完毕后需要去执行的函数。 3. 模型 模型需要借助于GLTFLoader库,可以通过npm安装依赖: ```npm install three-gltf-loader --save``` gltf格式的模型需要器: ```javascript import { GLTFLoader } from 'three-gltf-loader'; mounted() { //创建GLTFloader对象 this.loader = new GLTFLoader(); //模型 this.loader.load(url, object => { this.scene.add(object.scene); this.animate(); }); } ``` 其中,url是需要模型地址,object是完成后的对象。 4. 更新场景 ```javascript methods: { animate() { this.renderer.render(this.scene, this.camera); //转动,可以忽略 window.requestAnimationFrame(this.animate); this.scene.rotation.y += 0.01; } } ``` 其中,animate()方法是更新场景的方法。在该方法中需要更新场景的内容,并进行渲染。 5. 完整代码展示 ```javascript <template> <div ref="box"></div> </template> <script> import * as THREE from 'three'; import { GLTFLoader } from 'three-gltf-loader'; export default { data() { return { scene: null, camera: null, renderer: null, loader: null } }, mounted() { //创建场景 this.scene = new THREE.Scene(); //创建相机 this.camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000); //创建渲染器 this.renderer = new THREE.WebGLRenderer({ antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.renderer.setClearColor('#F5F5F5', 1.0); //将渲染器添到页面中 this.$refs.box.appendChild(this.renderer.domElement); //创建GLTFloader对象 this.loader = new GLTFLoader(); //模型 this.loader.load(url, object => { this.scene.add(object.scene); this.animate(); }); }, methods: { animate() { this.renderer.render(this.scene, this.camera); //转动,可以忽略 window.requestAnimationFrame(this.animate); this.scene.rotation.y += 0.01; } } } </script> ``` 这就是vue中three.js3D模型的完整教程,希望对你有所帮助。 ### 回答3: Vue是一种流行的JavaScript框架,而three.js是一个强大的WebGL库,用于创建和呈现3D图形。将Vue与three.js结合使用,可以在Vue应用程序中轻松和处理3D模型。 要在Vue中3D模型,首先需要安装three.js库。可以使用npm或yarn等包管理工具安装它。然后在Vue应用程序中导入该库并创建一个Scene对象。场景是three.js中用于呈现所有3D对象的容器。 然后需要定义一个渲染器,将场景渲染到屏幕上。在Vue中,可以在组件的mounted钩子函数中定义渲染器。需要将渲染器的DOM元素设置为Vue组件的$el属性。 现在就可以3D模型了。可以使用three.js中的Loader方法3D模型文件。three.js支持多种3D模型格式,如OBJ、STL和GLTF。完成后,将3D对象添到场景中即可。 由于Vue具有响应式数据绑定的特性,可以在Vue组件中轻松地控制3D模型的属性,比如位置、旋转和缩放。只需在Vue组件中定义数据模型,并在模板中使用数据绑定即可。 在Vue中使用three.js创建3D场景需要一些基本的知识,但很容易上手。可以使用Vue和three.js创建漂亮的3D场景和模型,从而增强Vue应用程序的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值