threeJs 起步案例

 安装

npm install three 

引入

// 导入整个 three.js核心库

import * as THREE from 'three'

 创建步骤

场景

想象一下,你要在网页中作出一个3D模型,网页是个平面,平面怎么能放三维物体呢?那么首先,你需要构建出一个三维场景

const scene = new THREE.Scene()

物体形状和材质

能放三维场景的空间建好了,现在里面是空的,我们需要放点三维物体进去,大部分真正开发需求是从专业建模软件导出的建模文件。当然threeJs也提供了一些几何体的API , 比如,创建一个立方体

//创建一个长宽高都为100的立方体

const geometry = new THREE.BoxGeometry(100, 100, 100);

 几何体只是有了一个形状,这之后我们需要给你创建的几何体一个材质,材质不同,对光的反应不同,基础网格材质MeshBasicMaterial 对光没反应,后续如果需要灯光效果,使用这个材质则看不到

//创建材质(外观)MeshLambertMaterial 对光有反应

const material = new THREE.MeshLambertMaterial();

形状和材质都建造好之后,将这两个参数给mesh,创建一个网格模型,网格模型在三维空间中就是一个虚拟的物体了

//创建一个网格模型对象

const mesh = new THREE.Mesh(geometry, material);

//把网格模型添加到三维场景

scene.add(mesh);

光照 

光照有环境光、点光、平行光、聚光

//点光源:两个参数分别表示光源颜色和光照强度

// 参数1:0xffffff是纯白光,表示光源颜色

// 参数2:1000,表示光照强度,可以根据需要调整

const pointLight = new THREE.PointLight(0xffffff, 100000);

//点光源位置

pointLight.position.set(100, 200, 150);//点光源放在x轴上

scene.add(pointLight); //点光源添加到场景中

至此为止,场景和物体都建好了,我们已经拥有一个三维环境了,但是页面上什么也看不到,想要“看到”你的三维场景,还需要一个摄像机和一个渲染器。相当于摄像机在不停对你的三维场景拍照,然后渲染给你看,你才能在平面网页看到你的三维物品

相机

原文说的很清楚,这里只存一下代码

// 定义相机输出画布的尺寸(单位:像素px)

const width = 800; //宽度

const height = 500; //高度

// 实例化一个透视投影相机对象

// 30:视场角度, width / height:Canvas画布宽高比, 1:near, 3000:far

const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);

//相机在Three.js三维坐标系中的位置

// 根据需要设置相机位置具体值

camera.position.set(200, 200, 200);

//相机拍摄方向

camera.lookAt(0, 0, 0); //坐标原点

 渲染器

 

// 创建渲染器对象

const renderer = new THREE.WebGLRenderer();

// 定义threejs输出画布、渲染区域的尺寸(单位:像素px)

renderer.setSize(width, height);

//执行渲染操作

renderer.render(scene, camera);

完整代码

<template>
    <div id="my-three"></div>
</template>

<script lang='ts' setup>
    import * as THREE from 'three'
    import { onMounted  } from 'vue'

    //创建一个三维场景
    const scene = new THREE.Scene();
    //创建一个物体
    const geometry = new THREE.BoxGeometry(100, 100, 100);
    //创建材质(外观)MeshLambertMaterial 对光有反应
    const material = new THREE.MeshLambertMaterial();
    //创建一个网格模型对象
    const mesh = new THREE.Mesh(geometry, material);
    //把网格模型添加到三维场景
    scene.add(mesh);

    /**
     * 光源
     */
    //点光源:两个参数分别表示光源颜色和光照强度
    // 参数1:0xffffff是纯白光,表示光源颜色
    // 参数2:1000,表示光照强度,可以根据需要调整
    const pointLight = new THREE.PointLight(0xffffff, 100000);
    //点光源位置
    pointLight.position.set(100, 200, 150);//点光源放在x轴上
    scene.add(pointLight); //点光源添加到场景中


    /**
     * 相机
     */
    // 定义相机输出画布的尺寸(单位:像素px)
    const width = 800; //宽度
    const height = 500; //高度
    // 实例化一个透视投影相机对象
    // 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面距离, 3000:远裁截面距离
    const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
    //相机在Three.js三维坐标系中的位置
    // 根据需要设置相机位置具体值
    camera.position.set(200, 200, 200); 
    //相机拍摄方向
    camera.lookAt(0, 0, 0); //坐标原点

    /**
     * 渲染器
     */
    // 创建渲染器对象
    const renderer = new THREE.WebGLRenderer();
    // 定义threejs输出画布、渲染区域的尺寸(单位:像素px)
    renderer.setSize(width, height);
    //执行渲染操作
    renderer.render(scene, camera); 
   
    onMounted(()=>{
        document.getElementById('my-three')?.appendChild(renderer.domElement)
    })
</script>

 如果想加载外部三维模型,可以去官网代码里找例子,仿照loaders文件中提供的加载代码去写,不同文件格式可能会不一样,这里记录我比较常见的fbx文件格式 

// 引入fbx模型加载库

import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'

const loader = new FBXLoader()

loader.load('fbx文件地址', (object) => {

        console.log(object)

        //得到fbx物体,将物体放入三维场景中

        scene.add(object)

})

注意:fbx文件地址是相对于html文件,而不是你js代码的位置 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值