Three入门 【基础知识,并搭建第一个场景】

这篇具有很好参考价值的文章主要介绍了Three入门 【基础知识,并搭建第一个场景】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌟前言

哈喽小伙伴们,最近工作比较忙一直没有给大家更新,这篇文章开始会开启新的专栏 Three.js,记录一下博主学习Three.js的过程;一起来看下吧。

🌟parcel

1.介绍

Parcel 是 Web 应用打包工具,适用于经验不同的开发者。它利用多核处理提供了极快的速度,并且不需要任何配置。

2.安装

首先通过 Yarn 或者 npm 安装 Parcel :
Yarn:

yarn global add parcel-bundler

npm:

npm install -g parcel-bundler

在你正在使用的项目目录下创建一个 package.json 文件:

yarn init -y

or

npm init -y

🌟Three

官网:Three.js

1.安装

1.1 下载

npm install three --save-dev

1.2 使用

import * as THREE from "three"

2.基本构成

2.1 场景

// 1、创建场景
const scene = new THREE.Scene();

2.2 相机

// 2、创建相机  透视相机
// fov:角度  aspect:宽高比  near:近端  far:远端
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);
// 设置相机位置
camera.position.set(0,0,10);
// 添加到场景
scene.add(camera);

2.3 物体

// 添加物体  立方缓冲几何体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1,1,1,);
// 创建材质
const cubeMaterial = new THREE.MeshBasicMaterial({color:0xffff00});
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry,cubeMaterial);
// 修改物体位置
// cube.position.set(5,0,0)
// cube.position.x = 3
// 将几何体添加到场景里边
scene.add(cube)

2.4 渲染器

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight);

2.5 监听浏览器变化

//监听屏幕大小的改变,修改渲染器的宽高和相机的比例:
window.addEventListener("resize",()=>{
    renderer.setSize(window.innerWidth,window.innerHeight)
    camera.aspect = window.innerWidth/window.innerHeight
    camera.updateProjectionMatrix()
})

2.6 使用轨道控制器(实现3D效果)

import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
// 创建轨道控制器
const controls = new OrbitControls(camera,renderer.domElement)

2.7 坐标轴辅助器

// 添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5);
scene.add(axesHelper);

2.8 渲染场景

function render() {
    renderer.render(scene, camera);
    // 渲染下一帧的时候就会调用render函数
    requestAnimationFrame(render);
}

render();

2.9 整体代码

import * as THREE from "three"
// 导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";

// 目标:使用控制器查看3D物体

// 1、创建场景
const scene = new THREE.Scene();

// 2、创建相机  透视相机
// fov:角度  aspect:宽高比  near:近端  far:远端
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);
// 设置相机位置
camera.position.set(0,0,10);
scene.add(camera);

// 添加物体  立方缓冲几何体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1,1,1,);
// 创建材质
const cubeMaterial = new THREE.MeshBasicMaterial({color:0xffff00});
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry,cubeMaterial);
// 将几何体添加到场景里边
scene.add(cube)

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight);


//监听屏幕大小的改变,修改渲染器的宽高和相机的比例:
window.addEventListener("resize",()=>{
    renderer.setSize(window.innerWidth,window.innerHeight)
    camera.aspect = window.innerWidth/window.innerHeight
    camera.updateProjectionMatrix()
})

// 将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement);

// // 使用渲染器,通过相机,将场景渲染进来
// renderer.render(scene,camera)

// 创建轨道控制器
const controls = new OrbitControls(camera,renderer.domElement)
// 添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5);
scene.add(axesHelper);

function render() {
    renderer.render(scene, camera);
    // 渲染下一帧的时候就会调用render函数
    requestAnimationFrame(render);
}

render();

通过以上代码,就创建了一个Three的3D项目,创建了我们的第一个Three的3D场景,并添加了一个黄色的正方体

3.动画

3.1 设置物体移动

function render() {
    // 每一帧都去修改物体的 position
    cube.position.x += 0.01
    if (cube.position.x>5) {
        cube.position.x = 0
    }
    
    renderer.render(scene, camera);
    // 渲染下一帧的时候就会调用render函数
    requestAnimationFrame(render);
}

render();

3.2 设置物体缩放

// 缩放
cube.scale.set(3,2,1)
cube.scale.x = 5

3.3 设置物体旋转

// 旋转
cube.rotation.set(Math.PI/4,0,0)

3.4 requestAnimationFrame(请求动画帧)

function render(time) {
    // console.log(time)
    // 每一帧都去修改物体的 position

    let t = time/1000 % 5; // %5 用来设置反复动画  利用求余
    move(t)
    renderer.render(scene, camera);
    // 渲染下一帧的时候就会调用render函数
    requestAnimationFrame(render);
}

render();

render函数默认传入一个 time 参数,利用该参数,可以计算物体运动的实际时间,进而设置更精确的动画效果

3.5 Clock跟踪时间处理动画

function render(time) {
    // console.log(time)
    // 每一帧都去修改物体的 position

    let t = time/1000 % 5; // %5 用来设置反复动画  利用求余
    move(t)
    renderer.render(scene, camera);
    // 渲染下一帧的时候就会调用render函数
    requestAnimationFrame(render);
}

render();

render函数默认传入一个 time 参数,利用该参数,可以计算物体运动的实际时间,进而设置更精确的动画效果

🌟写在最后

更多Three知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!文章来源地址https://www.toymoban.com/news/detail-476290.html

到了这里,关于Three入门 【基础知识,并搭建第一个场景】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

    一、介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming) 元编程(Metaprogramming,又译超编程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的

    2024年02月15日
    浏览(34)
  • 计算机基础知识(基础入门小白专属)

    ♥️ 作者:小刘在这里 ♥️ 每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一  起努力,共赴美好人生! ♥️ 夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至。 目录 计算机的发展史 计算机的硬件组成 计算机的分类

    2024年02月08日
    浏览(56)
  • 电脑入门基础知识

    答:一般情况下,电脑键盘只有一个。但是,也有一些特殊的情况,例如游戏玩家可能会使用额外的游戏键盘,或者一些专业人士可能会使用多个键盘来提高工作效率。但是在大多数情况下,一台电脑通常只会连接一个键盘。 答:外接键盘和笔记本键盘的按键数可能会有所不

    2024年02月04日
    浏览(64)
  • QT入门基础知识

    什么是QT QT是一个跨平台的C++图像用户界面应用程序框架 QT在1991年由奇趣科技开发 QT的优点 跨平台,几乎支持所有平台 接口简单,容易上手 一定程度上简化了内存回收机制 有很好的社区氛围 可以进行嵌入式开发 QT注意事项 命名规范 类名 首字母大写,单词和单词之间首字母

    2024年02月10日
    浏览(57)
  • Java入门基础知识

    JDK是Java工具开发包,包含了JVM(程序运行环境),核心类库(直接应用即可),开发工具(Javac,java,jdb,jhat…) JRE是Java运行环境,包含了JVM,核心类库,运行工具 JDK包含了JRE,JRE包含了jvm 全部小写(有特定含义的英文字符) class 表示一个类 整数类型 小数类型 字符串类型 :只用\\\"双引

    2024年02月09日
    浏览(73)
  • YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解

    前言: Hello大家好,我是小哥谈。 YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法,存在着很多可以学习的地方。本文将对YOLOv5检测算法的核心基础知识进行

    2024年02月14日
    浏览(51)
  • 计算机基础知识(基础入门小白专属)二

      ♥️ 作者:小刘在这里 ♥️ 每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一  起努力,共赴美好人生! ♥️ 夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至。 目录 vmware workstation  的用法 扩展部分

    2024年02月02日
    浏览(49)
  • 本文通过实例介绍了Redis的基础知识、数据类型、数据结构以及典型应用场景 值得一看!

    作者:禅与计算机程序设计艺术 2017年,Redis是基于MIT许可发布的一个开源的高性能键值数据库,其开发语言为C语言。它提供了多种数据类型(strings、hashes、lists、sets、sorted sets等),分布式支持(可横向扩展),内存存储,持久化功能,事务处理功能等。作为一种高性能的

    2024年02月06日
    浏览(70)
  • Kafka入门05——基础知识

    目录 副本数据同步原理 HW和LEO的更新流程 第一种情况 第二种情况 数据丢失的情况 解决方案 Leader副本的选举过程 日志清除策略和压缩策略 日志清除策略 日志压缩策略 Kafka存储手段 零拷贝(Zero-Copy) 页缓存(Page Cache) Kafka的消息可靠性 在ISR中,只要有一个Follower存活就能

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包