首页 > 其他分享 >学习ThreeJS

学习ThreeJS

时间:2024-06-11 10:44:12浏览次数:7  
标签:ThreeJS cube const THREE scene 学习 renderer new

创建第一个应用

  使用Three JS进行编程的时候,都是在调用new Three().XXX 来实现方法,让我们先根据官方文档创建一个demo

https://threejs.org/docs/index.html#manual/zh/introduction/Creating-a-scene

那我们需要什么东西才能让这个场景build起来呢?

  • 一个相机(camera),一般是使用PerspectiveCamera,因为最接近人的眼睛成像效果,还有正交相机等
    • 75, // fov 垂直方向上视角的大小 field of view
    • window.innerWidth / window.innerHeight, // aspect 纵宽比
    • 0.1, // near
    • 1000 // far
  • 一个场景(scene)
  • 一个渲染器 (renderer)
  • 需要渲染的东西:使用哪种几何图形,使用什么材质? 这里演示使用基础材质(MeshBasicMaterial)和立方体(BoxGeometry)

拿到了所有的实例,接下来可以开始逻辑部分

然后将创建的实例(cube)加入(add)到场景(scene)中,如下代码:

    const geometry = new THREE.BoxGeometry(1, 1, 1)
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
    const cube = new THREE.Mesh(geometry, material)
    scene.add(cube)

接着把渲染器加入到浏览器的body中:

document.body.appendChild(renderer.domElement)

创建的渲染器其实就相当于appen了一个canvas到dom里,我们可以调整canvas的大小,这并不是实时resize,如果用户修改窗体可视大小会留白

留个悬念:可以实时监听addListener resize?

renderer.setSize(window.innerWidth, window.innerHeight)

由于创建的相机和cube几何体都默认出现在(0,0,0)的位置,需要对相机在z轴上进行平移

camera.position.z = 5

设置一下地面

// 网格地面
const gridHelper = new THREE.GridHelper(10, 10)
scene.add(gridHelper)

最后把场景和照相机作为参数传到renderer的render函数里

 renderer.render(scene, camera)

如果想做出一个动画效果,就像下面代码块一样加上一个animate函数,这段代码每帧都会执行(正常情况下是60次/秒)

function animate() {
  requestAnimationFrame(animate) // 不能写死循环,需要调用dom提供的这个动画帧函数
  // mdn:https://developer.mozilla.org/zh-TW/docs/Web/API/window/requestAnimationFrame

  cube.rotation.x += 0.01
  cube.rotation.y += 0.01

  renderer.render(scene, camera) // 将renderer渲染的时机放到每一帧的函数调用里
}

animate() //调用一下
点击查看代码
<script>
import * as THREE from 'three'

const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(
  75, // fov  垂直方向上视角的大小    field of view
  window.innerWidth / window.innerHeight, // aspect 纵宽比
  0.1, // near
  1000 // far
)
camera.position.z = 5
camera.position.y = 2

const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)

const geometry = new THREE.BoxGeometry(1, 1, 1)
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
const cube = new THREE.Mesh(geometry, material)
scene.add(cube)

// 网格地面
const gridHelper = new THREE.GridHelper(10, 10)
cube.position.set(0, 3, 0)
scene.add(gridHelper)

function animate() {
  requestAnimationFrame(animate)

  cube.rotation.x += 0.01
  cube.rotation.y += 0.01

  renderer.render(scene, camera)
}

animate()
</script>

标签:ThreeJS,cube,const,THREE,scene,学习,renderer,new
From: https://www.cnblogs.com/HugoKwong/p/18241565

相关文章

  • “深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境”学习
    在CentOS7上安装Python3.10和PyTorch2.3.0时,为什么要首先升级OpenSSL?在CentOS7上,默认安装的OpenSSL版本可能不支持Python3.10所需的最新加密标准。因此,为了确保Python3.10能够正常工作,需要先升级OpenSSL到支持这些标准的版本。升级OpenSSL的具体步骤是什么?升级Ope......
  • Sklearn基础教程:机器学习界的瑞士军刀
    Sklearn基础教程:机器学习界的瑞士军刀引言在机器学习的世界里,sklearn(Scikit-learn)就像是一把瑞士军刀,小巧、多功能,而且非常实用。无论你是数据科学家还是编程新手,sklearn都能成为你解决问题的得力助手。今天,就让我们一起走进sklearn的奇妙世界,探索它的起源、发展过程、原......
  • 线性规划对偶学习笔记
    对于一个线性规划问题,若其有最优解,那么其对偶问题也有最优解,且最优值相等。如果对于一个困难的线性规划问题,其对偶形式比较简单,此时就可以通过线性规划对偶,解决其对偶问题,从而解决原问题。线性规划的原问题与对偶问题的变化规则:对于一个标准型线性规划:\[\max\quadC^Tx\\s.t......
  • 深度学习环境安装-conda-torch-Jupyter Notebook
    conda的安装为什么要安装这个,它是什么?它是一个管理环境的,当我们跑项目的时候,往往这些项目所需要的pickets库和环境是不同的,这时候如果自己的电脑里面只有一个版本的库的话,就运行不了,比如,A项目需要python3.7,那你只有3.8就不方便,所以就有了conda来管理这些项目所需要的库。安装地......
  • 【YOLOv8改进】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例摘要通道或空间注意力机制在许多计算机视觉任务中表现出显著的效果,可以......
  • SpringBoot 学习笔记
    表示层>业务层>持久层>数据库使用分层结构进行解耦表示层controller包用来存放表示层的各种动作类。命名规范:xxxController如何让一个类变为动作类:使用@RestControl注解packagecom.hello.controller;@RestController//让SpringBoot认识这个类是动作类pu......
  • 【算法学习】圆方树——处理仙人掌的利器
    圆方树大概分两种,一个是圆方树,一个是广义圆方树。圆方树这可以解决仙人掌上的问题。任意一条边至多只出现在一条简单回路的无向连通图称为仙人掌。很多题解将其作为无向图构建,本文将其构建为外向树,在这个问题中两种构建方式不会影响求解。构建方式记读入的图为原图,构建的......
  • Vue 学习笔记
    Vue.jsVue常用官网vue.jsv-charts(图表,地图)webpackvue-routeraxiosvue-cliElement-Plus白卷npminstall-gvue-cli#安装vue2脚手架vueinitwebpackwj-vue#初始化项目,一路回车npmrundev#启动项目VueCLI:Vue官方提供的脚手架工具npminstall@......
  • Java之数据库连接桥梁JDBC学习笔记
    JDBC调用Java与数据库的连接桥梁是JDBC(JavaDatabaseConnectivity)。JDBC是Java编程语言中用于连接和执行数据库操作的API(应用程序编程接口)。它提供了一种标准的方法,允许Java程序与各种数据库(如MySQL、PostgreSQL、Oracle、SQLServer等)进行交互。JDBC主要包括以下几个核......
  • TIA Portal软件学习(1)
    1.TIAPortal中关于变量与数据类型:(常用地址包括I\Q\M\L\DB)输入映像寄存器I0.0-10.7(一共可以到32767);输出映像寄存器Q0.0-Q0.7(同上)----由于输入输出是存在一定范围的所以引出了M\L\DB——中间寄存器M(全局):可以在变量表里进行选择格式;临时变量寄存器L(局部)——无法在变量表中进行......