threejs概览

threejs术语和概念

threejs的API很长,有很多概念和术语,理解了这些概念和术语,才能更好的使用threejs。这些概念和术语都藏在API右侧的大纲中,下图简单整理了一下这些概念:

这些概念又分为四个大类(见上图,个人划分,未必准确),个人觉得,可以按这四个大类的顺序来了解threejs,下面对这个个大类进行简述。

threejs三大组件

这三大组件分别是相机(Camera)、渲染器(Renderer)和场景(Scene),这三个组件是创建3D图形的必备组件。其中:

  • 场景用来容纳图形元素。场景相当于宇宙,而图形元素就是星星,图形元素只有添加到场景中,其坐标、大小等才有意义。
  • 相机的作用是定义可视域,即确定哪些图形元素是可见的。
  • 渲染器则负责用如何渲染出图像,是使用WegGL还是Canvas。

关于渲染器和相机,可以看【相机和渲染器】一文。

threejs基本图形元素

所谓基本图形元素,就是threejs中的图形显示,基本与这些对象相关。那么,理解了这些对象,就能知道如何在threejs中表示图形。threejs的基本图形元素都定义在Objects下,如下图:


可以打开【threejs参考文档】,查看一下。

这些类又可以分成下面4个小类别:

点、线、面

首先,所有图形都是由点、线或面构成,所以有:

  • Points:点或点云,可以用点或点云表示图形
  • Line/LineSegments:直线和虚线,可以用线或线团表示图形
  • Mesh:网格模型,可以用若干三角面表示图形

点、线、面都可以聚集到一起组成一个立体图形,也可以单独一个,作为一个2D图形,可以看【点云表示图形】【线团表示图形】【网格模型表示图形】这几个例子来直观了解。

精灵

Sprite在threejs中定义为“一个永远面向相机的平面,通常用来加载纹理”,其最重要的特点是永远面向相机,这在某些时候很有用。要想一睹精灵的风采,可以打开【精灵】,注意一下,所有图形都是面向相机的。

骨骼

骨骼相当于图形的控制单元,控制骨骼运动,就能带动骨骼上附着的图形的运动。如果你不理解什么是骨骼,可以看看腾讯开发的一个骨骼游戏框架【AlloyStick】,按JJKL,看看火柴人的运动。threejs的骨骼例子则看【这里】。
在threejs中,与骨骼相关的类有:

  • Bone:骨骼
  • Skeleton:骨架,由多根骨骼组成
  • SkinnedMesh:皮肤,附着在骨骼上的图形

其它类

  • lensFlare:光晕
  • LOD:细节级别
  • Group:组,可以将多个对象打包成一个组,便可统一操作。

其实,在Threejs中能看到的东西就是这些了,然后这些东西的组成也有很大的变化,从而演化成一个变化多端的系统。

几何形状和材质

threejs使用Geometry定义物体的几何形状,其实Geometry的核心就是点集,之所以有这么多的Geometry,是为了更方便的创建各种形状的点集。
threejs通过Material定义物体的材质。下面是创建一个图形的过程的例子:

//1、定义形状
let geometry = new THREE.BoxGeometry(10,10,10);
//2、定义材质
let meshMaterial = new THREE.MeshBasicMaterial({color:0xff0000});
let lineMaterial = new THREE.LineBasicMaterial({color:0x934894});
let pointMaterial = new THREE.PointMaterial({color:0x738938});//3、创建图形
let mesh = new THREE.Mesh(geometry,meshMaterial); //创建一个用网格模型表示的形状
let line = new THREE.Line(geometry,lineMaterial); //创建一个用线团表示的形状
let point = new THREE.Points(geometry,pointMateril); //创建一个用点云表示的形状

看了上面的例子,你应该明白,图形的几何形状(Geometry)是与表示方法无关的,你可以使用点、线或面来表示一个几何形状。

几何形状(Geometry)

Geometry其实就是点的集合,Geometrys分类下放的各种几何形状都是各种图形表示方法通用的:

这些类提供便捷方法来创建代表各种形状的顶点的集合。

材质(Material)

材质与图形的类型是相关的,点使用PointsMaterial,线使用LineXXXMaterial,网格使用MeshXXXMaterial,精灵使用SpriteMaterial等等。

纹理

纹理是用来表现图形的一些微小细节的。理论上讲,一个图形所有的细节都可以用点线面表示出来,但是这么做需要巨量的点线面,计算速度十分的慢,所以,在细节上,可以使用纹理。
在threejs中使用Texture来表示纹理,纹理可以从图片中加载,也可以从canvas中加载,所以,纹理能表示的图像很丰富。
要了解纹理,可以看【雪花】的例子

动画和声音

动画和声音暂时了解不多,后面再讲

框架原理

这部分包括常量,框架核心类,数学库和帮助类,后面再讲

threejs程序的对象图示

【Three.JS Walking Map】总结得很好,如图:


持续更新请看:https://teakki.com/p/58a3ef1bf0d40775548c908f

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#生成新浪微博短网址 示例源码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using DotNetSample.Models;using System.Web.Script.Serialization;namespace DotNetSample.Utils{public class ShortUrlHelper{/// <summary>/// 获取新浪短域名/// </summary…

leetcode数组汇总_[LeetCode] 300. 最长上升子序列

题目链接&#xff1a; https://leetcode-cn.com/problems/longest-increasing-subsequence难度&#xff1a;中等通过率&#xff1a;43.0%题目描述:给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释:…

threejs创建平面几何形状

创建平面几何形状 平面几何形状有三种&#xff1a;点&#xff0c;线&#xff0c;面三种&#xff0c;下面说说用threejs创建这几种形状的方法。 创建点 创建点可以使用Points类。 function createPoints(){//创建一个Geometry&#xff0c;并添加点let geometry new THREE.G…

新建vue3项目(未完待续)

vite 官网 https://cn.vitejs.dev/ 使用 vite 创建项目 npm create vitelatest 进入目录后 执行 npm install 运行程序 npm run dev vscode 不要同时安装 vetur 和 volar 关于安装eslint 官网 &#xff1a;https://eslint.org 安装ESLINT npm install eslint …

wcf 返回图片_wcf http 返回图片

做项目时候用wcf 返回图片,从官网上找了找一次只能返回一张图片&#xff0c;但是一直查不到返回多个图片的方法&#xff0c;ios 可以异步加载看速度也可以&#xff0c;先记录一下等以后用解决了再发[ServiceContract]public interface IImageServer{[OperationContract, WebGet…

threejs精灵(Sprite)

Sprite精灵 Sprite叫精灵&#xff0c;计算机图形学中&#xff0c;精灵指包含于场景中的二维图像或动画&#xff08;wiki&#xff09;。在threejs中&#xff0c;这样说明Sprtite&#xff08;doc&#xff09; : A sprite is a plane that always faces towards the camera , ge…

Ubuntu更改鼠标灵敏度

需要命令:xinput 清自行用 man xinput 查询 xinput 帮助文档 1、插入鼠标&#xff0c;打开终端&#xff0c;输入命令&#xff1a;xinput 查询当前已挂在设备 2、拔出鼠标&#xff0c;打开终端&#xff0c;再输入命令&#xff1a;xinput 查询当前已挂在设备&#xff0c;发现缺少…

echarts 生成 迁徙图_echarts3 迁徙图 迁入迁出(示例代码)

geoCoordMap {‘上海‘: [121.4648,31.2891],‘佛山‘: [112.8955,23.1097],‘保定‘: [115.0488,39.0948],‘兰州‘: [103.5901,36.3043],‘包头‘: [110.3467,41.4899],‘北京‘: [116.4551,40.2539],‘天津‘: [117.4219,39.4189],‘常州‘: [119.4543,31.5582],‘广州‘: […

threejs骨架形状

骨骼动画 骨骼是什么&#xff1f;骨骼就是一个可以控制其它形状的对象。在threejs中&#xff0c;骨骼&#xff08;Bone&#xff09;就是一个空的Object3D对象&#xff0c;当然&#xff0c;也可以是任何Object3D对象的子类。 创建骨架 创建骨架总体来说就四步&#xff1a; 创…

.net 知识积累

日历模式&#xff1a; 可以使用按钮事件进行触发 &#xff1b; 设置默认按钮&#xff1a; this.Form.DefaultButton"ID属性" &#xff1b; 注意此功能只能应用于.net控键中&#xff0c;必须位于 ruant "Server"; DefaultButton 必须是 IButtonControl 类…

tx2无法识别网络_Jetson TX2开篇--网络配置

续接上文&#xff0c;硬件连接完毕后&#xff0c;接通电源&#xff0c;按开机按钮。系统开机首次进入的是以nvidia用户登录的Ubuntu 命令行界面。习惯使用图形界面的用户莫慌&#xff0c;首次开机通过startx 命令发现无法启动图形界面&#xff0c;解决办法见(Jetson TX2开篇--安…

threejs加载3D模型例子

加载3D模型 首先要引入ColladaLoader加载器&#xff0c;Collada是一个3D模型交换方案&#xff0c;即不同的3D模型可以通过Collada进行相互转换&#xff0c;言外之意&#xff0c;threejs可以使用Collada将3D模型的数据转换成自己支持的格式&#xff0c;从而在浏览器上渲染出来。…

snailsvn使用教程_mac下使用snailSVN的踩坑之旅

一个很心酸的故事&#xff0c;公司了使用苹果电脑的只有我一个人&#xff0c;然后刚开始使用苹果电脑&#xff0c;开启了我饿自闭之旅&#xff0c;网上查到的一些方法是不可以使用的&#xff0c;所以我把正确的方法记录下来&#xff0c;给大家指个路首先&#xff0c;说明下&…

bzoj 1083 繁忙的都市

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1083 题解&#xff1a; 在bzoj里能遇到如此如此水的题真是不容易…… 乍一看好像有点吓人&#xff0c;其实是一道Kruskal模板题…… 1 #include<cstdio>2 #include<algorithm>3 using namesp…

threejs纹理

纹理 纹理用来表现物体的细节。理论上可以将物体的每个细节建模出来&#xff0c;但是这样时间成本和性能成本都太高&#xff0c;因此&#xff0c;将物体的一些细节用纹理来表示。 图片纹理 图片纹理直接在物体表面应用图片。可以使用TextureLoader类的load方法来加载纹理。 …

mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计

今天来讲一下怎么利用MySql进行库表设计1 引擎选择在 mysql 5.1 中&#xff0c;引入了新的插件式存储引擎体系结构&#xff0c;允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构&#xff0c;允许数据库专业人员或者设计库表的软件开发人员为…

刷题向》一道逆向思维题(BZOJ1046)(NORMAL)

这道题对于一类题都有一个通用思路&#xff1a;反向递减序列即为正向字典序。 对于逆向思维的题还要多做才能培养这种对于逆向思维的感觉。 想到这种方法之后&#xff0c;就很简单了。 因为nm不会炸&#xff0c;所以反向LIS叠一个贪心就能过了。 直接甩题目&代码 Descripti…

threejs对象拾取

对象拾取 对象拾取也就是要获得鼠标事件发生位置的图形对象。在threejs中&#xff0c;是通过Raycaster 对象来拾取对象的&#xff0c;ray是射线&#xff0c;caster是投射器&#xff0c;从字面上即可理解其工作原理是&#xff1a;从某个方向发射一条射线&#xff0c;穿过鼠标所…

android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...

我想在Android WebView的PWA中使用QR码扫描仪。PWA在chrome浏览器上可以正常工作。我确实有在“应用程序”->“应用程序名称”->“权限”下设置摄像机的权限minSdkVersion 26和targetSdkVersion 28在装有Android 9的华为手机上测试问题是似乎没有授予该权限。 另外&#…

threejs指定对象旋转中心

指定对象旋转中心 默认情况下&#xff0c;对象的旋转中心都是自身的中心。对于组对象而言&#xff0c;也是如此。因此&#xff0c;可以利用这个特点&#xff0c;实现对象绕任何点旋转&#xff0c;也就是指定旋转中心。比如我们想要下图的对象绕A点旋转 我们可以添加我们的对…