《Three.JS零基础入门教程》第二篇:起步案例

three.js资料分享

01 起步案例:

接下来, 我们通过一个起步案例来快速体验threejs

基础概念

在三维世界中, 有这样几个概念我们需要先理解

  • 场景

  • 相机

  • 物体

  • 光源

1) 场景

如何理解场景

场景就是一个三维的世界, 在这个世界中可以放置各种各样的物体

可以理解成一个空间, 或者容器

2) 相机

如何理解相机

思考: 如何在二维平面表现三维效果

由于我们的显示器是二维平面, 只有两个维度, 如何在一个二维平面表现出三维效果呢?

在现实生活中, 得益于拍照技术, 从不同的角度拍射(观察)同一个物体, 然后通过一些光照阴影我们的大脑可以自行脑补出三维的画图

这里的相机就是三维空间的观察者

当相机从不同的角度观察同一个物体会得到不同的图像, 然后把这些图像使用一定的技术拼接组合, 我们的大脑会根据生活在三维世界的经验自行脑补出三维空间

3) 物体

在三维空间, 可以放置一些物体, 这些物体就是被观察的对象

不同的物体形状, 大小, 材质和纹理不相同

尽可能模拟现实生活中的实际物体, 比如:

three.js实现3D看车

4) 光源

为了更好的模拟三维效果, 需要一些光照和阴影

2 实现步骤

使用three.js需要这样几步

  1. 创建一个三维场景(Scene)

  2. 创建一个相机(Camera)

  3. 创建渲染器渲染(Renderer)

1) 创建三维场景

const scene = new THREE.Scene()

2) 创建相机

// 2. 创建透视相机
const camera = new THREE.PerspectiveCamera(

45,

window.innerWidth / window.innerHeight,

1,

1000

)

camera.position.z = 5

3) 创建渲染器

// 3. 创建渲染器
const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
// 4. 渲染
renderer.render(scene, camera)

如何理解渲染

渲染就是拿相机在场景中拍照, 拍的照片显示在canvas画布上

上述完整示例

// 导入threejs
import * as THREE from 'three'

// 1. 创建场景
const scene = new THREE.Scene()
// 2. 创建透视相机
const camera = new THREE.PerspectiveCamera(
 45,
 window.innerWidth / window.innerHeight,
 1,
 1000
)
camera.position.z = 5
// 3. 创建渲染器
const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
// 4. 渲染
renderer.render(scene, camera)

4) 添加物体

创建一个立方体, 添加到场景中

在three.js中, 使用Mesh(网格)表示一个物体, 包括

  • 几何形状(Geometry)

  • 表面材质(Material)

// 5. 创建立方体(几何+材质)
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
const cubeMaterial = new THREE.MeshNormalMaterial()
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)
// 添加到场景
scene.add(cube)

上述代码

  1. 创建了长宽高均为1个单位的立方体BoxGeometry

  2. 使用法向量材质MeshNormalMaterial

  3. 基于几何形状和材质创建立方体

  4. 添加到场景中

效果

思考:为什么感觉是一个二维的正方形?

5) 添加动画

为了方便观察三维效果, 我们可以使用两种方式

  • 物体不变, 相机围绕物体旋转, 从不同的位置观察

  • 相机不变, 物体旋转

这里, 为了便于大家理解, 我们先固定相机, 通过动画旋转物体演示

function animation() {
 // 改变角度
 cube.rotation.x += 0.01
 cube.rotation.y += 0.01
 // 重新渲染
 renderer.render(scene, camera)

 // 下一帧渲染回调
 requestAnimationFrame(animation)
}

animation()

6) 渲染优化

上述我们会看到明显的锯齿, 显示也不够清晰, 这里我们通过设置两个参数, 改善渲染效果

const renderer = new THREE.WebGLRenderer({ antialias: true })
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)

上述代码

  1. 通过设置渲染器的antialias属性为true, 开启抗锯齿

  2. 设置DPI, 使用更多的像素点来描述同一个物体

完整示例:

// 导入threejs
import * as THREE from 'three'

// 1. 创建场景
const scene = new THREE.Scene()
// 2. 创建相机
const camera = new THREE.PerspectiveCamera(
 45,
 window.innerWidth / window.innerHeight,
 1,
 1000
)

camera.position.z = 5

// 5. 创建立方体(几何+材质)
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
const cubeMaterial = new THREE.MeshNormalMaterial()
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)
// 添加到场景
scene.add(cube)

// 3. 创建渲染器
const renderer = new THREE.WebGLRenderer({ antialias: true })
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
// 4. 渲染
function animation() {
 // 改变角度
 cube.rotation.x += 0.01
 cube.rotation.y += 0.01
 // 重新渲染
 renderer.render(scene, camera)

 // 下一帧渲染回调
 requestAnimationFrame(animation)
}

animation()

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想开始学习three.js,可以从教程源代码入手。教程源码提供了一些示例和实例,可以启发你的创作灵感,也可以让你更快地理解three.js的基础知识。 在查看源码之前,你需要先安装three.js和web开发环境。安装完成后,你就可以开始查看源码了。 教程源码一般会有一些说明和注释,这些注释可以帮助你更好地理解代码的功能和实现方法。你可以先阅读这些注释,然后尝试运行代码,看代码是如何运作的。 当你理解了一些基础的代码后,你可以尝试自己写一些小程序,练习three.js的使用。这些小程序可能简单,但是可以帮助你加深对three.js的理解,并为今后更复杂的项目做好准备。 最重要的是,遇到问题不要担心,可以参考three.js社区和文档,也可以在网上寻找相关的教程和视频。通过不断摸索和学习,你一定能掌握three.js的使用技巧,创作出自己喜欢的作品。 ### 回答2: three.js是一个能够在网页上实现3D图形和动画效果的JavaScript库,可以用于创建各种有趣的3D场景和游戏。针对初学者,有很多的入门教程和示例代码可供学习和练习。 在网上搜索“three.js入门教程源代码”可以找到很多优秀的教程和示例代码,如three.js官方文档、CodePen、Github等。此外,同类的OpenGL和WebGL等技术也有很多优秀的资源可供参考。 对于初学者来说,建议先了解three.js的基本知识,如坐标系、场景、相机、灯光、材质、几何体等等。然后可以通过实践来加深理解,例如创建一个简单的立方体、平面、球体等。同时也可以尝试调整相机、灯光和材质等参数,看看会发生什么变化。 在学习过程中,遇到问题可以查阅文档或者在相关社区寻求帮助。同时也要多注重实践,通过参考示例代码和自己实践来提升技能。 ### 回答3: three.js是一个非常流行的JavaScript 3D图形库,很多人想要学习它,但是对于初学者来说,这可能会让他们感到非常困难。因此,一些网站和博客提供了一些入门教程以帮助初学者了解并开始使用three.js,其中一些包括源代码。 这些源代码提供一些基础教学,帮助用户通过编写一些简单的three.js代码并观察结果来学习three.js的基础知识。 用户可以下载源代码,并使用它们在自己的计算机上运行三维场景。 这些源代码通常提供了许多有关three.js的基础知识,包括: 1. 创建场景,灯光和相机。 2. 从文件中加载3D模型和纹理。 3. 使用材质和纹理来渲染对象。 4. 添加动画和控制器。 5. 处理鼠标和键盘输入。 6. 在网页上嵌入three.js场景。 这些源代码通常以注释的形式提供,说明每个代码块的功能。此外,这些源代码通常遵循良好的编程实践,使读者易于理解和跟踪整个过程。 总的来说,three.js零基础入门教程源代码非常适合那些想要学习three.js的初学者,他们可以通过这些源代码快速入门,并了解更多three.js知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值