前端图形学(三十一)—快上车!我带你去看threejs基础类的源码(向量頂點源碼)

admin admin
2024-07-15
上一章节回顾上一章节我们深入了threejs的源码引出了法向量的概念和作用在threejs光源和法向量如何生成光照模型通过利用BufferGeometry类自定义一顶点和法向量数据渲染自定义的几何图形本章目标Geometry类的基本使用vector3类的源码分析face3类的源码分析一、GeometryGeom……

上一章节回顾上一章节我们深入了threejs的源码引出了法向量的概念和作用在threejs光源和法向量如何生成光照模型通过利用BufferGeometry类自定义一顶点和法向量数据渲染自定义的几何图形本章目标Geometry类的基本使用vector3类的源码分析face3类的源码分析

一、Geometry

Geometry和BufferGeometry都是普通的几何图形,那么它们有什么区别呢?

前端图形学(三十一)—快上车!我带你去看threejs基础类的源码(向量頂點源碼)
(图片来源网络,侵删)

通过前面的学习,我们知道了,BufferGeometry是通过我们传入顶点数据然后渲染的,那么Geometry这个类还可以是通过传入三角面来渲染图形的,我们接下往下看~

先来看用Geometry实现的自定义几何图形:

和前面的效果没什么区别,源码:

核心代码解析:

1、实例化一个空的几何体对象(不需要任何参数)

var box = new THREE.Geometry();

2、给box对象添加4个顶点,这里我们使用一个三维向量表示一个顶点,创建4个顶点

box.vertices.push(new THREE.Vector3( 0,0,0),new THREE.Vector3( 2,0,0),new THREE.Vector3( 0,2,0),new THREE.Vector3( 0,0,2 ));

3、我们通过索引去选取3个顶点作为了一三角面然后渲染。
在box对象下,有一个faces属性,它是用来收集三角面的数组。

文档上也有说

box.faces.push( new THREE.Face3( 0, 1, 2) );box.faces.push( new THREE.Face3( 0, 1, 3) );

这里面的(0,12)和(0,1,3)表示的是box.vertices中的索引。

源码分析:

Vector3三维向量

构造函数

它可以描述出在三维空间中的任意一个点坐标。
继续看它有哪些方法成员。

set方法:传入x,y,z后可以去更改这个向量本身,

setScalar:它可以将当前的向量设置成xyz都一样的向量

当然我们也可以通过索引的方法去修改和获取向量对应的值。

setComponent和getComponent

这个类本身的提供的方法比较基础,那么我们接下来去看下face3这个类

face3 三角面

我们在上面的示例中在实例化它的时候,除了传入三个顶点的索引之外,我们还传入了第三个参数,是一个vector3的对象,我们来看来源码

之所以传了第四个参数,是因为我阅读了源码才知道的,那么第四个参数它是什么意思呢?

normal这个单词前面我们已经讲过,它表示的是平面的法向量,下面还有一个属性是vertexNormals表示的是顶点的法向量。

通过源代码知道,两个属性都是由第四个参数normal的类型来决定的。

vector3类型表示的是平面的法向量

数组类型则表示的是各个顶点的法向量。

示例中,我定义的第一个平面的法向量为(0,0,1)怎么来的呢?很简单,第一个平面渲染出来的结果是平行于我们的屏幕,那么他的法向量就是垂直于屏幕,即(0,0,1),也可能是(0,0,-1),两个方向刚好相反。

另外一个平面同理。

那么我们通过前面的章节的学习知道,法向量最终是要和我们的光照进行合成计算的,法向量方向直接影响着光照的结果。

继续看源码,我们可以再传入第五个参数,看起来是颜色数据,但是我还未具体去尝试,这里就不多说了。

总结

本示例中,我们同样绘制了两个三角形,但是细心的童鞋可能发现了,一般来说,绘制两个三角形至少需要6个顶点,但是我们上面的代码中只运用到了4个点~

其实这个不难发现,两个三角形中,有两个顶点是重复的,我们通过索引的方式去选取的顶点,利用的就是顶点的复用

顶点的复用的作用也很明显,节约了数组空间,那么复杂的三维图形中,可能会有成千上万个顶点,如果不复用顶点,那么顶点数据将非常庞大,对资源消耗非常之大。

以上是今天所有的分享内容。
喜欢的请点赞关注,不喜欢的解散。


这里是【畅哥聊技术】前端图形学相关技术文章,更多精彩内容持续更新中。


未完待续。


其他相关 RELEVANT MATERIAL
礼物送对了_客户才会来!美容院送什么礼品给顾客好?(客戶什麼呢禮品)

礼物送对了_客户才会来!美容院送什么礼品给顾客好?(客戶什麼呢禮品)

admin admin
5
2024-07-24
朱丽艳,专注美业门店招客8年。做好拓客开好店。你送的越多赚的越多,而且我告诉你,会送礼的人一定都是人精,你越会送。我那个时候开店的时候,都会给顾客送什么,我会给她送四种礼。第一种礼就叫拓客礼。你今天不要再去街上,去给别人到处的发卡发抵用券,你会发现这种方法真的已经几乎没有什么效果了。我们要做的是什么呢?给她送面……...
屈老师中班社会教案《城市美容师》含PPT课件(課件工人孩子們)

屈老师中班社会教案《城市美容师》含PPT课件(課件工人孩子們)

admin admin
6
2024-07-24
  1、采访、讨论,感知发现城市美容师的工作特点;  2、愿意将自己的想法积极地表达出来;  3、爱惜自己生活的环境,能初步懂得尊重别人的劳动。活动准备:  PPT课件、联系好的环保工人以及他的装备等。配套课件:中班社会课件《城市美容师》PPT课件下载地址:kj.qulaoshi.com/ppt/2052.ht……...
大连美容#同城好店推荐(皮膚同城超音波)

大连美容#同城好店推荐(皮膚同城超音波)

admin admin
4
2024-07-24
大家好,今天想跟大家聊一下关于清洁的问题。其实很多女性在做护理时容易过度清洁,这是为什么呢?因为我们过度摩擦皮肤,导致了很多敏感肌肤的出现。因此,我们在Link洗脸时采用非常轻柔的手法和仪器。很多人认为洗脸时用力越大,皮肤就越干净,但这是错误的观念。在洗脸时,手指只是起辅助作用。因此,我们的护理前提是在不破坏皮……...
哪些水果可以美容_七种水果让你拥有美丽容颜(水果美容維生素)

哪些水果可以美容_七种水果让你拥有美丽容颜(水果美容維生素)

admin admin
6
2024-07-24
1.圣女果圣女果又是蔬菜,又是水果,富含纤维素及机酸有助于促消化、通便秘。且西红柿还含有较多维生素C和烟酸,保证每天一个,不仅可以使面部红润有光泽,而且还能抗衰老,永葆年轻。含有维生素的含量是一般西红柿的八倍,可以提高我们的防晒功能,增强人体抵抗力,延缓身体衰老。2、草莓红粉佳人 春末夏初是草莓展现优美美舞姿的……...
金牌美容顾问都在用的20个销售话术(建议收藏)(美容產品時間)

金牌美容顾问都在用的20个销售话术(建议收藏)(美容產品時間)

admin admin
7
2024-07-24
是不够努力?还是真的没有销售天赋? 其实,是你话语不对,在合适的时机说合适的话才是聪明人干的事。快来看看金牌美容顾问都在用的20个销售话术吧! 1.我没有钱? 我能理解你的感觉,其实我们基本保养护理每天花不到一包零品的价钱,女人不能为钱而活,要为美丽而活。 2.我没有时间很忙 姐,现在如果不注重肌肤的保养,一心……...
开美容店的基本流程(門店都是非常重要)

开美容店的基本流程(門店都是非常重要)

admin admin
4
2024-07-24
开店前我们定位非常关键。预算是不是也很关键,我们服务什么人群,哪个年龄段?她对面部需求多还是对养生需求多?那我们就在他们的附近找地方选址,一定要选择一个可以注册美容院营业执照的商铺。如果你的预算高,可以选择商铺或者底商,如果你的预算低,那就可以选择一些写字楼或者是工作室,然后进入装修设计的环节,我们要把这整个的……...
最新评论
年度爆文