【Three.JS零基础入门教程】第五课:项目规划

前期回顾:

【Three.JS零基础入门教程】第一课:搭建开发环境

【Three.JS零基础入门教程】第二课:起步案例

【Three.JS零基础入门教程】第三课:开发辅助

【Three.JS零基础入门教程】第四课:基础变换

一个three.js的项目由这么几个部分组成

  • 场景
  • 物体
  • 灯光
  • 相机
  • 渲染器
  • 工具

这里我们可以对项目目录结构进行拆分, 分为:

  • scene: 场景
  • mesh: 网格(物体)
  • light: 灯光
  • camera: 相机
  • renderer: 渲染器
  • utils: 工具

1 封装场景

创建src/scene/index.js

import * as THREE from 'three'

const scene = new THREE.Scene()

export default scene

2 封装相机

创建src/camera/index.js

import * as THREE from 'three'

const camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
0.1,
1000
)

camera.position.set(0, 0, 10)

export default camera

3 封装渲染器

创建src/renderer/index.js

import * as THREE from 'three'

function isFunction(val) {
  return typeof val === 'function'
}

class Renderer extends THREE.WebGLRenderer {
  constructor(scene, camera) {
    super({ antialias: true })
    this.scene = scene
    this.camera = camera
    this.init()
  }
  init() {
    this.setPixelRatio(window.devicePixelRatio)
    this.setSize(window.innerWidth, window.innerHeight)
    document.body.appendChild(this.domElement)

    // 默认渲染
    this.render(this.scene, this.camera)
  }
  animation(cb) {
    if (!isFunction(cb)) {
      console.error('param must be a function')
      return
    }

    this.setAnimationLoop(cb)
  }
}

export default Renderer

4 封装物体

创建src/mesh/index.js

import * as THREE from 'three'

const cubeGeometry = new THREE.BoxGeometry(2, 2, 2)
const cubeMaterial = new THREE.MeshNormalMaterial()

const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)

export default cube

5 封装工具集

创建src/untils/index.js

import * as THREE from 'three'

import { OrbitControls } from 'three/addons/controls/OrbitControls'

export default class Utils {
  constructor(options = {}) {
    this.scene = options.scene
    this.camera = options.camera
    this.renderer = options.renderer

    if (!this.scene || !this.camera || !this.renderer) {
      console.error('scene, camera, renderer can not be null')
      return
    }
    this.init(options)
  }
  init(options) {
    this.initOrbitControls(options.orbitControl)
    this.initAxesHelper(options.axesHelper)
    this.initGridHelper(options.gridHelper)
  }
  // 默认开启轨道控制器, 只有当传入的orbitControl===false时关闭
  initOrbitControls(value) {
    if (value === false) {
      console.log('orbitControl disabled')
      return
    }

    new OrbitControls(this.camera, this.renderer.domElement)
  }
  // 默认开启坐标轴辅助工具, 只有当传入的axesHelper===false时关闭
  initAxesHelper(value) {
    if (value === false) {
      console.log('axesHelper disabled')
      return
    }

    const init = {
      size: 10,
    }
    const params = Object.assign(init, value)

    const axesHelper = new THREE.AxesHelper(params.size)
    this.scene.add(axesHelper)
  }
  // 默认开启网格辅助工具, 只有当传入的gridHelper===false时关闭
  initGridHelper(value) {
    if (value === false) {
      console.log('gridHelper disabled')
      return
    }
    const init = {
      size: 20,
      divisions: 20,
      color1: 0xffffff,
      color2: 0xffffff
    }
    const params = Object.assign(init, value)

    const gridHelper = new THREE.GridHelper(...Object.values(params))
    gridHelper.material.transparent = true
    gridHelper.material.opacity = 0.5

    this.scene.add(gridHelper)
  }
}

6 导入使用

main.js中导入

import scene from './scene'
import camera from './camera'
import mesh from './mesh'
import Renderer from './renderer'
import Utils from './utils'

scene.add(mesh)

const renderer = new Renderer(scene, camera)

renderer.animation(() => {
  renderer.render(scene, camera)
})

new Utils({
  scene,
  camera,
  renderer,
})

下一期进一步详解介绍Threejs中的常用对象, 包括

  • 物体
    • 几何
    • 材质
    • 纹理
  • 场景
  • 相机等

请持续关注我们,以免错过推送,免费学习threejs。

我们不仅提供优质课程,助你学习更进一步!

新中地学生threejs练习:

动图封面

需要视频版教程戳↓↓↓


GIS资料免费领icon-default.png?t=N7T8https://www.wjx.cn/vm/Qm8Ful2.aspx

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值