threejs——多重场景渲染

2024-02-02 10.11.43.gif

前言

摸鱼时发现了这threejs实现的效果,从效果图中可以看出来,在滚动页面的时候,模型在进入不同的场景,或者说进入不同的页面,渲染模式改变了,下面我们一步一步拆解出这种效果是怎么实现的,首先第一步,先找到一个合适的模型,我是直接下载的这个原地址的飞机模型,我们加入一些自己的思考和实践来实现出这个效果。希望大家能够跟着一起做,效果实现起来很简单,但是过程中遇到的小细节,还是需要好好把握一下,本文在 gitee仓库 有代码,每个节点都有tag,有没讲明白的地方,可以偷看一下代码。

准备工作

模型下载下来是.obj格式的,这里用OBJLoader来加载模型,提取公共方法

```ts // 加载OBJ模型 export function loadObj(url: string) { return new Promise((resolve, reject) => { new OBJLoader() .load(url, function (object) { resolve(object) }); }) }

```

加载模型

ts // 加载模型 const loadModel = async () => { const model = await loadObj('./model/1405+Plane_1.obj') }

创建场景

场景创建的代码这里就不赘述了,之前的历史文章也都提到很多次,用到的api包括场景Scene,渲染器WebGLRenderer,透视相机PerspectiveCamera,环境光AmbientLight,平行光DirectionalLight,轨道控制器OrbitControls

将加载好的模型,添加到场景中,我们得到如下的效果

2024-02-02 16.32.07.gif

渲染两种不同材质的模型

以已经加载的模型为基础,创建出一份线稿文件,并加载到场景中,创建线稿代码

修改一下loadModel方法,调用创建线稿的方法

```ts // 加载模型 const loadModel = async () => { const model = await loadObj('./model/1405+Plane_1.obj') const line = createLine(model) model.traverse((child) => { if (child.isMesh) { child.material = mat.clone(); } })

/*
    * 模型加载出来以后再渲染场景 
 */
renderer && renderer.setAnimationLoop(render);

// 修改分场景的背景色 方便区分
scene_1.background = new THREE.Color("#ff99cc")

scene_1.add(lightGroup)
scene_1.add(model)
line.position.x = 100
scene_1.add(line)

} ```

createLine

ts const createLine = (model) => { const edges = new THREE.EdgesGeometry(model.children[0].geometry, 20); let line = n

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙华鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值