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,一经查实,立即删除!

相关文章

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

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

threejs创建平面几何形状

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

threejs精灵(Sprite)

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

threejs加载3D模型例子

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

threejs纹理

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

threejs对象拾取

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

threejs指定对象旋转中心

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

threejs设置对象层次

设置层次 threejs提供了层次的支持。和相机处于同一层次的对象可见,否则不可见。在threejs中,最多可以设置32层,默认的层次是1。层次在有些系统中很有用,可以将不同的模式的对象设成不同的层次,这样,切换模…

Text段、Data段和BSS段

不同的compiler在编译的过程中对于存储的分配可能略有不同,但基本结构大致相同。 大体上可分为三段:Text段、Data段和BSS段。 text段用于存放代码,通常情况下在内存中被映射为只读,但data和bss是可写的。 数据存放通常分成如下几个…

threejs渲染器剔除模式

渲染器剔除模式 渲染器可以设置成舍弃某些面,如前面、背面等,在【WebGLRenderer Constants】中对此有说明。默认情况下,是剔除掉背面,也就是背对着相机的面。下面看看例子: 首先创建一个正方形,给每个面不…

threejs路径

路径 引用百度百科的解释: 路径通常指存在于多种计算机图形设计软件中的以贝塞尔曲线为理论基础的区域绘制方式。路径在Canvas、SVG上都有相关定义,一般用来创建形状。在threejs中,也可以用来创建形状,除此之外,还可…

OpenGL ES 纹理设置

纹理过滤纹理采样最近点采样线性纹理采样MIPMAP纹理纹理过滤 纹理拉伸:重复拉伸和截取拉伸 用于指定纹理坐标超过(00.0,1.0)范围时所发生的行为,使用glTexParameterf函数指定,GL_TEXTURE_WRAP_S 定义 s 坐标超出范围[0.0, 1.0]的情况&#xf…

ubuntu联网不稳定,时断时连问题的解决办法

概览 ubuntu联网不稳定,时断时连问题的解决办法现象网络一会儿连上,过一会又自动断开,再等一会儿又断了。问题原因可能是受ipv6的影响解决办法关闭掉ipv6 详细步骤 1、编辑连接,打开“ipv6 settings”,将method设置…

搭建GitLab+Jenkins持续集成环境图文教程

GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,…

threejs-经纬度转换成xyz坐标的方法

用threejs做3D应用时,很经常会接触到球状物体,比如说地球,要定义球上的一点,用经纬度是常用的办法。现在,我们要在北京这个地方标一个点,北京的坐标为——北纬39.9”,东经116. 3”,该…

dashboard windows 前端开发环境搭建

dashboard是kubernetes的云管平台UI界面,正常情况下,其是在linux下开发的,但是,有些特殊情况下,我们也可能希望在windows上搭建起dashboard的开发环境 这里我们将搭建的开发环境的结构如下: windows上只运…

Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法...

Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后删除是没有删除干净,导致日…

跨域问题及CORS机制

跨域 跨域是指一个资源请求与其不在同一个域(源)的资源,不在同一个域(源)是指两个域的协议、域名或端口不同。 同源策略 出于安全考虑,浏览器制定了同源策略, 限制了某些跨域请求。同源策略是…

【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...

模拟题,可以用树链剖分线段树维护。 但是学了一个厉害的。。树状数组的区间修改与区间查询。。 分割线里面的是转载的: -------------------------------------------------------------------------------- [ 3 ] 上面都不是重点……重点是树状数组的区…

oracle .dbf文件过大_学习这篇Oracle数据库文件坏块损坏的恢复方法,拓展你的知识面...

一、Oracle数据库系统简介:ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间…