three.js学习2

2023-02-17  本文已影响0人  浮若年华_7a56

1.几何体

内置几何体
three.js的内置几何体大致可分为以下几类:

1-1.二维几何体
1-1-1.PlaneGeometry 矩形平面

PlaneGeometry(width,height,widthSegments,heightSegments)

分段数,3d中是没有曲线的,所有曲线都是由直线组成,想要曲线更加平滑,就需要更多的直线组成。所以,分段数越高物体就越平滑,模型就更加精细。

1676512002834.png
1-1-2.CircleGeometry圆型平面

CircleGeometry(radius,segments,thetaStar,thetaEnd)

1676611569766.png
1-1-3.RingGeometry环形(该对象可以在中心定义一个孔)

RingGeometry(innerRadius,outerRadius,thetaSegment,phiSegment,thetaStar,thetaLength)

1-1-4.ShapeGeometry自定义图形

ShapeGeometry包含两个参数Shape对象(也可以是Shape数组)和一个options配置对象

THREE.SHAPE的绘图函数
THREE.ShapeGeometry中最重要的部分是THREE.Shape,它可以用来创建图形。所以下面介绍用来创建THREE.Shape的绘画函数

1-2.三维几何体
1-2-1.BoxGeometry(指定宽度、高度和深度就可以创建一个长方体)

属性

1676942189835.png
1-2-2.SphereGeometry三维球体

属性

1676961881452.png
1-2-3.CylinderGeometry(圆柱几何体)

属性

1-2-4.ConeGeometry(圆锥几何体)
1-2-5.TorusGeometry(圆环几何体)

属性

1-2-6.TorusKnotGeometry(环状扭结几何体)

属性

1-2-7.PolyhedronGeometry(多面几何体)

属性

1-2-8.IcosahedronGeometry

该几何体创造一个有20个相同三角形的多面体,只需要指定radius和detail值即可

1677636335566.png
1-2-9.TetrahedronGeometry

该几何体创建一个四面体,该多面体只包含四个顶点创建的四个三角形面,只需要指定radius和detail值即可

1677637557495.png
1-2-10.OctahedronGeometry

该几何体创建一个八面体,由六个顶点创建而出,只需要指定radius和detail即可

1677637983458.png
1-2-11.DodecahedronGeometry

该几何体创建一个十二面体,只需要指定radius和detail即可

1677639518923.png
1-3.路径合成几何体
1-3-1.TubeGeometry管道

该几何体可以沿着一条三维样条线拉伸出根管
TubeGeometry(path,tubularSegments,radius,radialSegments,closed)

1677655893786.png
1-3.2.LatheGeometry车削

LatheGeometry允许你从一条光滑的曲线创建图形,这条曲线由多个点定义,我们称之为样曲线,并且这条曲线绕着物体的中心Z轴旋转,你把曲线勾勒成什么形状,那么LatheGeometry就可以生成什么样的面
LatheGeometry(points,segments,phiStart,phiLength)

1677658875382.png
1-3-3.ExtrudeGeometry挤压

ExtrudeGeometry(shapes,options)

该对象可以将一个二维形状挤成一个三维几何体
当使用这个几何体创建Mesh的时候,如果希望分别对它的表面和它挤出的侧面使用单独的材质,可以使用一个材质数组,第一个材质用于其表面,第二个材质将用于其挤压出的侧面

1677721368575.png
1-4.线性几何体

线性几何体其实就是用线显示几何体的方式

1-4-1.WireframeGeometry网格几何体

网格几何体:把网格中的三角面用三角显来显示
WrieframeGeometry(geometry)

1-4-2.EdgesGeometry(geometry,thresholdAngle)
1-5.其他几何体
1-5-1.ConvexGeometry(凸面几何体)

我们随机创建若干个点,传入ConvexGeometry中,那么它就会根据这些点,生成一个三维图形,折干三维图形,就是这些点能够生成的最小的三维图形

1-5-2.ParmetricGeometry参数化缓冲几何体(需要从three/examples/jsm/geometries/ParametricGeometry.js引入)

ParmetricGeometry可以让你创建基于等式的几何体

1677736051095.png
1-5-3.TextGeometry三维文本

TextGeometry(text,options)
options配置项

1677745013760.png

2.光源

2-1.AmbientLight基本光源

该光源的颜色将会叠加到场景现有物体的颜色上,该光源没有特别的来源方向,也不会产生阴影,通常与其他光源一起使用,目的是弱化阴影或给场景中添加额外的颜色

2-2.PointLight 点光源

一种单点发光,照射所有方向的光源
属性

2-3.SpotLight 聚光灯光源

该光源,是一种锥形的光源效果,该光源具有方向和角度

当castShadow启动时,可以设置阴影特效属性

2-4.DirectionalLight(平行光)

该光源也被称为无限光,该光源的光线是平行的,也就是说物体的每一个区域接收到的入射角是相同的

2-5.HemisphereLight

这是一个特殊的光源,可以通过模拟反光面,和光线微弱的天空,来创建出更加自然的室外光

2-6.RectAreaLight

该光源可以指定散发光线的平面,而不是一点,该光源的主要应用场景是模拟明亮的窗户或条状灯光光源,不支持阴影

2-7.LensFlare(镜头光晕)

3.材质

材质的基类为THREE.Material。它内部定义材质的公有属性,这些属性可以分为三类:
基础属性(控制物体不透明度、是否可用、自定义名称或者ID等)、融合属性(物体如何与背景融合)、高级属性(控制底层WEBG上下文对象渲染物体的方式)
基础属性:

融合属性

高级属性

MeshBasicMaterial、MeshDepthMaterial、MeshNormalMaterial属于简单的网格材质

3-1.MeshBasicMaterial基础材质

基础材质,可显示几何体线框,可赋予简单的颜色,该材质不用考虑场景中光线的影响,使用该材质的网格会被渲染成简单的平面图多边形,而且可以显示几何体的线框

特有属性:

3-2.MeshDepthMaterial网格深度材质

一种按照深度绘制几何体的材质,深度基于相机远近平面,白色最近,黑色最远

属性:

3-3.MeshNormalMaterial网格发现材质

THREE.MeshNormalMaterial一种把法向量映射到RGB颜色的材质,该材质拥有的属性同MeshDepthMaterial相同

注:法向量,是指面垂直的向量,它可以有助于决定光的反射,有助于将纹理映射到三维模型,并提供如何计算光照、阴影和为表面像素着色的信息

3-4.MeshLambertMaterial(网格Lambert材质)

一种非光泽表面的材质,没有镜面高光,用于创建暗淡的物体
属性:

3-4.MeshPhongMaterial(网格Phong材质)

一种具有镜面高光的光泽表面的材质
属性:

3-5.MeshStandardMaterial(网格标准材质)

一种基于物理的标准材质,使用Metallic-Roughness工作流程。它可以计算表面与光线的正确互动关系,从而使渲染出来的物体更加真实
特有属性:
metaIness(金属感程度)0代表完全塑料质感,1代表完全金属质感,默认0.5
roughness(粗糙程度)控制物体表面的粗糙程度,默认0.5,0时产生镜面反射,1时产生漫反射

3-6.MeshPhysicalMaterial(网络物体材质)

该材质与MeshStandardMaterial非常相似,但是提供了对反光度的更多控制属性

3-7.MeshToonMaterial(网格卡通材质)

M3eshPhongMaterial卡通着色的扩展

3-8. ShadowMaterial(阴影材质)

此材质可以接收阴影,但在其他方面完全透明

3-9.ShaderMaterial(着色器材质)

允许使用自定义着色器材质,直接控制顶点的放置方式和像素的着色方式

基础属性:

高级属性:

什么是着色器?
着色器是webGL的主要组件之一,着色器是一种使用GLSL(OpenGL Shading Language)编写并在GPU上原型的程序。它们被用于定位几何体的每个顶点,并为该几何体的每个可见像素着色着色器·分为两种

顶点着色器Vertex Shader

顶点着色器(vertex Shader)的作用是定义几何体的顶点。其思想是发送顶点位置、网格变换(如定位position、旋转rotation和缩放scale)、摄像机信息(如定位position、旋转rotation和视野fov),然后,GPU将按照顶点着色器中的指示处理所有这些信息,以便将顶点投影到2D空间,该空间将成为我们的渲染render,也就是我们的画布canvas

使用顶点着色器时,其代码将应用于几何体的每个顶点,但有些数据会在每个顶点之间发生变化,这种类型的数据(在顶点之间变化的数据)称为attribute属性变量

有些数据不需要像网格位置那样变换,用于对同一组顶点组成的单个3D物体中所有顶点都相同的变量,这种(顶点之间不发生变换的数据)称为uniform统一变量

顶点着色器会首先触发。当放置完顶点后,GPU会知道几何体的哪些像素是可见的,然后接下去使用片元着色器

片元着色器Fragment Shader

片元着色器的作用是为几何体的每个可见片元(像素)进行着色
片元着色器可以通过使用uniform将数据和着色器发送至GPU,之后 GPU就会按照指令对每个片元进行着色

从顶点着色器发送到片元着色器中的插值计算数据被称为varying

3-10.LineBasicMaterial(直线基础材质)

一种用于绘制线框样式几何体的材质,可用于THREE.Line几何体,创建着色的直线
属性:

3-11.LineDashedMaterial(虚线材质)

一种用于绘制虚线样式几何体的材质
该材质属性于THREE.LineBasicMaterial相同,只是多了几个属性

上一篇下一篇

猜你喜欢

热点阅读