Threejs入门教程

一、本地搭建Threejs官方文档网站

1.官网地址:https://github.com/mrdoob/three.js 下载压缩包并解压或使用git clone

若github过慢,则使用gitee对应网址:three.js: mrdoob/three.js 同步库

2.目录解析

3.启动方式

在three.js项目根目录下执行如下命令,yarn可使用 npm install yarn -g 安装

# 安装依赖
yarn install
# 启动项目
yarn start

浏览器访问:

二、parcel搭建three.js开发环境

1.简介

目的:方便模块化进行three.js项目的学习和开发

Parcel官网:Building a web app with Parcel | Parcel 中文网

2.部署步骤

1.为项目创建一个目录,并在项目根目录下执行

yarn add --dev parcel

创建src目录,并在其下创建index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="./assets/css/style.css" /></head><body><script src="./main/main.js" type="module"></script></body>
</html> 

style.css

* {margin: 0;padding: 0;}body {background-color: skyblue;}

main.js

import * as THREE from "three";// console.log(THREE);// 目标:了解three.js最基本的内容// 1、创建场景
const scene = new THREE.Scene();// 2、创建相机
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);
// console.log(renderer);
// 将webgl渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement);// 使用渲染器,通过相机将场景渲染进来
renderer.render(scene, camera); 

3.打包脚本

{"name": "ch01","version": "1.0.0","description": "","main": "index.js","scripts": {"dev": "parcel src/index.html","build": "parcel build src/index.html"},"author": "","license": "ISC","devDependencies": {"parcel": "^2.4.1"},"dependencies": {"dat.gui": "^0.7.9","gsap": "^3.10.3","three": "^0.139.2"}
} 
# 安装依赖
yarn install
# 运行项目
yarn dev

访问如下网址即可:

三、基本概念 

1.三大基本概念:场景、相机、渲染器 

1.创建场景

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

2.创建相机

// 2、创建相机
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000
);
// 设置相机位置
camera.position.set(0, 0, 10);
scene.add(camera);

three.js里有几种不同的相机,在这里,我们使用的是PerspectiveCamera(透视摄像机)。

第一个参数是视野角度(FOV)。视野角度就是无论在什么时候,你所能在显示器上看到的场景的范围,它的单位是角度(与弧度区分开)。

第二个参数是长宽比(aspect ratio)。 也就是你用一个物体的宽除以它的高的值。比如说,当你在一个宽屏电视上播放老电影时,可以看到图像仿佛是被压扁的。

接下来的两个参数是近截面(near)和远截面(far)。 当物体某些部分比摄像机的远截面远或者比近截面近的时候,该这些部分将不会被渲染到场景中。或许现在你不用担心这个值的影响,但未来为了获得更好的渲染性能,你将可以在你的应用程序里去设置它。

下图椎体就是上面设置视野角度、长宽比、近截面和远截面的演示的相机透视椎体。

 3.渲染器

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// console.log(renderer);
// 将webgl渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement);// 使用渲染器,通过相机将场景渲染进来
renderer.render(scene, camera); 

除了创建一个渲染器的实例之外,我们还需要在我们的应用程序里设置一个渲染器的尺寸。比如说,我们可以使用所需要的渲染区域的宽高,来让渲染器渲染出的场景填充满我们的应用程序。因此,我们可以将渲染器宽高设置为浏览器窗口宽高。对于性能比较敏感的应用程序来说,你可以使用setSize传入一个较小的值,例如window.innerWidth/2和window.innerHeight/2,这将使得应用程序在渲染时,以一半的长宽尺寸渲染场景。

接下来将renderer(渲染器)的dom元素(renderer.domElement)添加到我们的HTML文档中。渲染器用来显示场景给我们看的<canvas>元素。

最后就是对将相机对场景进行拍照渲染啦。这一句就可以将画面渲染到canvas上显示出来

4.加入立方体

// 添加物体
// 创建几何体
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);

要创建一个立方体,我们需要一个BoxGeometry(立方体)对象. 这个对象包含了一个立方体中所有的顶点(vertices)和面(faces)。

接下来,对于这个立方体,我们需要给它一个材质,来让它有颜色。这里我们使用的是MeshBasicMaterial。所有的材质都存有应用于他们的属性的对象。为了简单起见,我们只设置一个color属性,值为0x00ff00,也就是绿色。这里和CSS或者Photoshop中使用十六进制(hex colors)颜色格式来设置颜色的方式一致。

第三步,我们需要一个Mesh(网格)。 网格包含一个几何体以及作用在此几何体上的材质,我们可以直接将网格对象放入到我们的场景中,并让它在场景中自由移动。

默认情况下,当我们调用scene.add()的时候,物体将会被添加到(0,0,0)坐标。但将使得摄像机和立方体彼此在一起。为了防止这种情况的发生,我们只需要将摄像机稍微向外移动一些即可。

汇总代码 main.js

import * as THREE from "three";// console.log(THREE);// 目标:了解three.js最基本的内容// 1、创建场景
const scene = new THREE.Scene();// 2、创建相机
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);
// console.log(renderer);
// 将webgl渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement);// 使用渲染器,通过相机将场景渲染进来
renderer.render(scene, camera); 

四、轨道控制器

1.创建轨道控制器

const controls = new OrbitControls(camera, renderer.domElement);

两个参数: 

相机,让哪一个相机围绕目标运动。默认目标是原点。立方体在原点处。

渲染的画布dom对象,用于监听鼠标事件控制相机的围绕运动。

2.根据控制器更新画面 

function render(){
//如果后期需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入controls.update() 
renderer.renderer(scene,camera)
requestAnimationFrame(render)
}

因为控制器监听鼠标事件之后,要根据鼠标的拖动,来控制相机围绕目标运动,并根据运动之后的效果,显示出画面来。为了保证画面流畅渲染,选择使用请求动画帧requestAnimationFrame,在屏幕渲染下一帧画面时触发回调函数来执行画面的渲染。 

requestAnimationFrame
是HTML5的新特性,区别于setTimeout和setInterval。requestAnimationFrame比后两者精确,采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果。

requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销。 

汇总代码 main.js

import * as THREE from "three";
// 导入轨道控制器
import {OrbitControls} from "three/examples/jsm/controls/OrbitControls"
// console.log(THREE);// 目标:了解three.js最基本的内容// 1、创建场景
const scene = new THREE.Scene();// 2、创建相机
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);
// console.log(renderer);
// 将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)
requestAnimationFrame(render)
}render()

文章出处:Threejs入门课程最全教程文档- 文集 哔哩哔哩专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252549.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Javascript机器学习教程

Javascript机器学习教程 使用 Javascript 和 TensorflowJS 通过动手项目从头开始掌握机器学习 课程英文名&#xff1a;Machine Learning with Javascript 此视频教程共1.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下载地址 课程编号…

CAD梦想画图中删除命令

“删除”命令用于删除在CAD作图过程中的图线和多余的图线。用户既可以先选择对象再执行“删除”&#xff0c;也可以先执行“删除”命令再选择对象。选择“删除”命令后&#xff0c;CAD屏幕上的十字光标将会变成一个拾取框&#xff0c;选择需要删除的对象&#xff0c;按enter键。…

CAD怎么删除图块注释?删除CAD图块注释步骤

CAD设计过程中&#xff0c;有时候会在图纸中添加许多注释&#xff0c;如&#xff1a;文字注释&#xff0c;图块注释&#xff0c;标注样式注释等。当需要删除图纸中的CAD图块注释时&#xff0c;你知道该如何操作吗&#xff1f;本节课程小编就来给大家分享一下浩辰CAD软件中删除C…

AutoCAD单独卸载,不影响其他软件,CAD 2021安装失败,怎么完全彻底卸载删除清理干净CAD 2021各种残留注册表和文件?

AIOC超级工具箱 AIOC超级工具箱是专门为了针对Autodesk类软件卸载不干净而导致Autodesk安装失败问题进行研发的Autodesk一键卸载工具。现在虽然360或一些卸载软件提供了强力卸载Autodesk的工具&#xff0c;可以将Autodesk注册表和一些Autodesk目录的Autodesk残留信息删除&…

CAD卸载重新安装方法,使用清理卸载工具完全彻底删除干净CAD各种残留注册表和文件。

CAD没有按照正确方式卸载&#xff0c;导致CAD安装失败。现在虽然360或者其他一些卸载软件提供了强力卸载清理CAD的工具&#xff0c;可以将CAD注册表和一些CAD目录的CAD残留信息删除干净&#xff0c;但仍不能确保将CAD所有相关dll程序文件、exe可执行文件和注册表信息全部彻底删…

CAD 卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件

CAD提示安装未完成&#xff0c;某些产品无法安装该怎样解决呢&#xff1f;&#xff0c;一些朋友在win7或者win10系统下安装CAD失败提示CAD安装未完成&#xff0c;某些产品无法安装&#xff0c;也有时候想重新安装CAD的时候会出现本电脑windows系统已安装CAD&#xff0c;你要是不…

【AutoCAD 卸载工具,完全彻底删除清理干净AutoCAD各种残留注册表和文件】

AutoCAD卸载工具&#xff0c;完全彻底删除干净AutoCAD各种残留注册表和文件。AutoCAD安装失败&#xff0c;怎么完全彻底删除清理干净AutoCAD各种残留注册表和文件呢&#xff1f;有些同学想把AutoCAD重新安装&#xff0c;但是AutoCAD安装失败显示失败&#xff0c;有时AutoCAD安装…

CAD单独卸载,不影响其他软件,CAD专用卸载修复工具,一键完全彻底卸载删除CAD软件的专用卸载工具

AIOC超级工具箱 小伙伴是不是遇到 CAD/3dmax/maya/Revit/Inventor 安装失败或者安装不了的问题了呢&#xff1f;AUTODESK系列软件着实令人头疼&#xff0c;CAD/3dmax/maya/Revit/Inventor安装失败之后不能完全卸载&#xff01;&#xff01;&#xff01;&#xff08;比如maya&a…

cad 2020安装失败,怎么完全彻底卸载删除清理干净cad 2020各种残留注册表和文件? 【转载】

cad 2020卸载工具&#xff0c;完全彻底删除干净cad 2020各种残留注册表和文件。cad 2020安装失败&#xff0c;怎么完全彻底删除清理干净cad 2020各种残留注册表和文件呢&#xff1f;有些同学想把cad 2020重新安装&#xff0c;但是cad 2020安装失败显示失败&#xff0c;有时cad …

CAD 残留文件和注册表如何完全彻底卸载删除干净【转载】

CAD 残留文件和注册表如何完全彻底卸载删除干净&#xff1f;cad安装失败&#xff0c;怎么完全彻底删除清理干净cad各种残留注册表和文件呢&#xff1f;有些同学想把cad重新安装&#xff0c;但是cad安装失败显示失败&#xff0c;有时cad安装到一半就显示失败&#xff0c;然后会问…

CAD卸载方法,如何完全彻底卸载删除清理干净CAD各种残留注册表和文件? 【转载】

CAD卸载方法&#xff0c;完全彻底删除干净CAD各种残留注册表和文件。CAD安装失败&#xff0c;怎么完全彻底删除清理干净CAD各种残留注册表和文件呢&#xff1f;有些同学想把CAD重新安装&#xff0c;但是CAD安装失败显示失败&#xff0c;有时CAD安装到一半就显示失败&#xff0c…

cad卸载_如何卸载干净CAD?

小伙伴是不是遇到 CAD/3dmax/maya/Revit/Inventor 安装失败或者安装不了的问题了呢&#xff1f;AUTODESK系列软件着实令人头疼&#xff0c;CAD/3dmax/maya/Revit/Inventor安装失败之后不能完全卸载&#xff01;&#xff01;&#xff01;&#xff08;比如maya&#xff0c;cad&am…

CAD绘图设计中怎样删除CAD图层?怎样清理CAD图层文件?

我们平时在设计图纸的时候&#xff0c;有的时候&#xff0c;也经常会遇到图层繁多&#xff0c;需要处理的情况&#xff0c;那么图层少的话&#xff0c;我们可以一个一个的进行删除清理&#xff0c;如果图层多了该怎么办&#xff1f;那今天小编就给大家详细的解说一下遇到这种情…

一键卸载cad,强力卸载cad,强力删除autodesk,完美卸载max,彻底卸载revit,彻底删除autodesk的任何软件

点击下载后&#xff0c;请保存文件&#xff0c;并解压后&#xff0c;再打开程序 ▼▼▼下载地址▼▼▼ http://bbs.qbgxl.com/job.php?actiondownload&aid320 主页地址 Autodesk 专用安装检查和卸载程序 http://bbs.qbgxl.com/read.php?tid118 下面介绍下这个工具&…

dwg批量删除自定义范围内指定地物的工具,CAD快速批量删除指定地物,基于FME实现批量删除CAD数据的指定地物

目录 一、实现效果 二、实现过程 1.数据准备 2.提取地物CASS码 3.根据CASS码初步分离拟删除的地物 4.通过几何关系最终分离要删除的地物 5.数据输出 三、工具使用优化 四、总结及注意事项 今天带来一个基于FME实现对dwg数据批量删除自定义范围内指定地物的工具案例。主…

CAD看图软件如何删除CAD图纸内容?

在CAD制图学习中&#xff0c;我们会查看大量的CAD图纸。有时候还需要对CAD图纸内容做修改。例如&#xff0c;该如何删除CAD图纸里的内容呢&#xff1f;今天我就 在这里和大家分享一下&#xff0c;CAD看图软件如何删除CAD图纸内容&#xff1f;我们可以使用CAD看图软件来演示操作…

计算机怎么清理CAD,怎么完全卸载cad

cad作为一款自动计算机辅助设计软件&#xff0c;在电脑中想要安装cad的更高版本&#xff0c;就需要将旧版本的cad卸载干净才可以进行安装&#xff0c;但有些小伙伴并不是很清楚怎么完全卸载cad&#xff0c;那么针对这一情况&#xff0c;接下来小编给大家分享的就是将电脑上的ca…

cad完全卸载工具

不知道为什么有时候卸载了电脑之前的cad软件后&#xff0c;再安装一个新的cad时会有安装不上的情况&#xff1f;那么这时可以配合cad完全卸载工具来试试&#xff0c;这是专门针对这个问题而推出的一款电脑卸载工具&#xff0c;有了该工具即可轻轻松松的帮助用户将电脑中cad的注…

cad卸载_CAD卸载不干净导致安装失败?别慌!老司机手把手教你卸载!

CAD经常出现文件丢失啊、这样那样的提示(反正就是看不懂),要是身边有个大神级朋友还好,没有的小盆友只能乖乖的卸载,重新安装了,那么又有个问题拦住我们了——怎么把CAD卸载干净呢? 由于卸载不干净,再次安装CAD时,很容易出现问题,导致安装失败,今天小编就教大家如何卸…

虎牙直播PHP解析接口更新

最近很多人一直在找的虎牙解析源码&#xff0c;现在分享给大家&#xff01; 由于虎牙直播官方更新变量规则而且加入了时间key&#xff0c;现在已经更新修复采集! 输入直播房间可直接解析当前直播间的直播源地址 文件解析使用说明&#xff1a;huya.php?id&#xff08;直播的…