threejs--01整体api整理

文章目录

  • threejs学习
    • 01 threejs的基本组成
      • 1. threejs的坐标系
      • 2. threejs的场景
      • 3. threejs相机的类型
      • 4. threejs光
        • 4.1 threejs的光
        • 4.2 threejs的阴影
      • 5. threejs的物体
        • 5.1 threejs的曲线
        • 5.2 threejs的几何体
        • 5.3 threejs的材质
        • 5.3 threejs的纹理
      • 6. threejs的动画
        • 6.1 threejs的动画效果
        • 6.2 threejs的动画关键帧轨道
    • 02 threejs的加载、渲染、数学计算和辅助方法等
      • 1. threejs的核心
      • 2. threejs的附加组件
      • 3. threejs的加载器
      • 4. threejs的渲染器
        • 4.1 threejs的渲染器
        • 4.2 threejs的着色器
      • 5. threejs的辅助方法
      • 6. threejs的数学计算
            • 插值
      • 7. threejs的常量

threejs学习

01 threejs的基本组成

想象自己是造物主,首先创造一个场地,然后加物体,最后再添加光。这些物体是由不同的物质组成的,同时又遵守一些运动规律。最后你有一个相机或者摄影机就可以选择拍摄了。很容易记住threejs的基本组成**:场景+物体(材质+形状+运动)+光+相机。

除此之外与现实世界不同的是threejs还有加载、渲染、数学计算和辅助方法等用于内容。

1. threejs的坐标系

threejs的坐标系是右手坐标系。

  • 右手坐标系:大拇指x正方向,食指y正方向,中指z正方向。
  • x轴:从左到右,y轴**:从下到上,z轴**:从后到前。

2. threejs的场景

设置场景背景和环境效果。

  • Scene:用于组织3D场景中的所有元素,包括物体、光源、相机等。它是渲染场景的容器。
  • Fog:用于设置场景的雾化效果。它通过模拟大气中的颗粒物来创建一种深度感,使得远处的物体看起来更模糊。
  • FogExp2FogExp2 类是 Fog 类的扩展,它使用指数衰减来模拟雾化效果,使得远处的雾更加均匀和自然。

3. threejs相机的类型

正交相机、透视相机、多透视相机。

  • Camera:Camera是所有相机类型的基类,它提供了相机的基本功能,但通常不会直接使用。相反,您会使用它的子类,如PerspectiveCamera或OrthographicCamera。
  • OrthographicCamera:正交相机。适用于2D游戏和UI渲染。
  • PerspectiveCamera:透视相机。真实感3D场景的标准选择。
  • ArrayCamera:虚拟现实(VR)应用中的双眼视图,游戏动画等多视图。由多个子相机组成,每个子相机可以渲染场景的不同部分。
  • CubeCamera:生成立方体贴图,用于环境映射或反射映射,天空盒(Skybox)。由六个子相机组成,每个子相机面向一个方向(上、下、前、后、左、右),用于捕捉场景的六个不同方向的视图。
  • StereoCamera:3D电影或VR应用中的双眼视图。由两个子相机组成,每个子相机代表一个眼睛的视角,渲染合成。

4. threejs光

代码里光和影是分开添加的,在可以产生阴影的光下添加阴影。

4.1 threejs的光
  • AmbientLight(环境光):均匀照亮,不考虑位置,无阴影。
  • HemisphereLight(半球光):模拟天空盒。天空和地面反射的光,无阴影。
  • DirectionalLight(定向光):太阳光或远处的灯光。光线平行,可以产生阴影。
  • PointLight(点光源):灯泡或蜡烛等。所有方向,考虑位置,可以产生阴影。
  • SpotLight(聚光灯):手电筒、舞台灯光或汽车前灯等。圆锥形的光束,考虑位置方向,可以产生阴影。
  • AreaLight(区域光):灯罩、窗户或其他平面光源。平面光源,柔和的阴影和光照效果。插件。
  • LensFlare(镜头光晕):光晕效果。不是光源,是一种视觉效果。
4.2 threejs的阴影
  • LightShadow:所有阴影投射器的基类。它定义了阴影投射器的基本接口和功能。
  • PointLightShadow:点光源阴影(PointLight)。
  • DirectionalLightShadow:定向光源阴影(DirectionalLight)。
  • SpotLightShadow:聚光灯阴影(SpotLight)。它使用聚光灯的位置、方向和角度来确定阴影区域,并将其应用于场景中的物体

5. threejs的物体

物体基本的内容**:点、线、网格、精灵、动画。

  • :点Points;
  • 线:线Line、环线LineLoop、线段LineSegments直线+闭合曲线+任意曲线;
  • :精灵Sprite图标 粒子等;
  • :网格Mesh(平面+立体)、蒙皮网格SkinnedMesh;
  • 动画:骨骼Bone、组Group、骨架Skeleton骨骼组;
  • 多细节层次LOD:根据观察者的距离来显示不同细节级别的模型。
5.1 threejs的曲线

在Three.js中,这些类都是用于创建和操作曲线(Curve)的。如圆弧、贝塞尔曲线、椭圆等。

  1. ArcCurve:创建一个圆弧路径。指定圆弧的中心点、半径、起始角度和结束角度。
  2. CatmullRomCurve3:创建一个基于Catmull-Rom样条曲线的路径。需要指定一系列控制点来定义曲线的形状。
  3. CubicBezierCurve:创建一个三次贝塞尔曲线路径。需要指定四个控制点来定义曲线的形状。
  4. CubicBezierCurve3:创建一个三维空间中的三次贝塞尔曲线路径。需要指定四个控制点来定义曲线的形状。
  5. EllipseCurve:创建一个椭圆路径。需要指定椭圆的中心点、半径和起始角度。
  6. LineCurve:创建一个直线路径。需要指定两个点来定义直线的起点和终点。
  7. LineCurve3:创建一个三维空间中的直线路径。需要指定两个点来定义直线的起点和终点。
  8. QuadraticBezierCurve:创建一个二次贝塞尔曲线路径。需要指定三个控制点来定义曲线的形状。
  9. QuadraticBezierCurve3:创建一个三维空间中的二次贝塞尔曲线路径。
  10. SplineCurve:创建一个基于样条曲线的路径。需要指定一系列控制点来定义曲线的形状。
5.2 threejs的几何体

  1. PlaneGeometry平面、CircleGeometry圆形、ShapeGeometry塑性(自定义面)、TorusGeometry圆环
  2. 简单几何体
    CubeGeometry立方体、CylinderGeometry圆柱、TorusKnotGeometry圆环扭结、PolyhedronGeometry多面体、IcosahedronGeometry二十面体、OctahedronGeometry八面体、TetrahedronGeometry四面体
  3. 稍微复杂的几何体
  • ConvexGeometry凸面体:通过提供一个顶点数组,Three.js会计算出一个包围这些顶点的凸包。
  • LatheGeometry扫描体:(螺丝)
  • ExtrudeGeometry拉伸几何体:拉伸一个形状通常是一个THREE.Shape对象来形成的3D形状。
  • TubeGeometry管状体:沿着一条曲线通常是THREE.Curve对象的路径的管状形状。
  • ParametricGeometry参数几何体:用于创建通过参数方程定义的形状。
  • TextGeometry文本几何体
5.3 threejs的材质

threejs的材质分为:基础材质、标准材质、物理材质、法向材质。一个物体的基本颜色+纹理+折射反射等+阴影。

  • PointsMaterial:用于渲染点,可以设置点的颜色、大小和纹理。
  1. 线
  • LineBasicMaterial基础线条材质、LineDashedMaterial虚线材质
  • SpriteMaterial:用于精灵(2D图像),可以设置颜色、纹理和透明度等。
  1. 基础材质:不考虑光照的影响
  • MeshBasicMaterial基础网格材质:可以设置颜色或纹理,用于简单的渲染。
  • Material材质的抽象基类:所有其他材质类型都继承自这个类。它提供了一些通用的属性,如颜色、透明度等。
  1. 标准材质:考虑光照的影响
  • MeshLambertMaterial:用于非光泽表面,不考虑镜面反射。
  • MeshPhongMaterial:用于光滑表面,考虑光照的影响,包括镜面反射。
  1. 距离
  • MeshDepthMaterial:深度网格材质,根据物体到摄像机的距离来渲染颜色,常用于创建深度贴图。
  • MeshDistanceMaterial:网格距离材质,用于阴影映射,可以根据物体到光源的距离来渲染颜色
  1. 阴影
  • ShadowMaterial:阴影材质,用于创建接收阴影的材质,使物体表面能够接收并显示阴影。
  1. 着色器
  • RawShaderMaterial:原始着色器材质,允许使用GLSL着色器来定义材质,但不会自动添加任何Three.js内置的 uniforms 或 attributes。
  • ShaderMaterial:着色器材质,允许使用GLSL着色器来定义材质的外观和行为,Three.js会自动添加一些内置的 uniforms 和 attributes。
  1. 物理
  • MeshPhysicalMaterial:物理网格材质,是MeshStandardMaterial的扩展,提供了更多的物理渲染属性,如清晰度、透射率等。
  • MeshStandardMaterial:标准网格材质,基于物理的渲染(PBR)材质,提供更真实的光照和反射效果。
  1. 法向
  • MeshNormalMaterial:一种特殊的材质,它将法向量映射到RGB颜色上,通常用于调试或创建特殊效果。
  1. 风格
  • MeshToonMaterial:实现卡通着色的材质,通过渐变纹理来模拟光照效果。
  1. 其他
  • MeshMatcapMaterial:使用材质捕捉(matcap)纹理来定义物体的颜色和光照效果
5.3 threejs的纹理
  1. 基础:图片、视频、canvas
  • Source:所有纹理类型的基类,它定义了纹理的基本属性和方法。
  • Texture:最常用的纹理类型,它使用图像文件作为纹理数据。你可以使用各种图像格式(如PNG、JPG等)作为纹理。
  • VideoTexture:使用HTML5的Video元素作为纹理。它允许你使用视频文件作为纹理,从而创建动态的纹理效果。
  • CanvasTexture:使用HTML5的Canvas元素作为纹理。它允许你直接在HTML5画布上绘制纹理内容。
  1. 压缩
  • CompressedTexture:一种压缩纹理,它使用了各种压缩格式来减少纹理文件的大小,从而提高加载速度和性能。
  • CompressedArrayTexture:CompressedArrayTexture是一种压缩的纹理数组,它使用压缩格式来存储多个纹理,每个纹理可以被映射到Mesh的不同部分。
  1. 立方体
  • CubeTexture:CubeTexture是一个立方体贴图,包含了六个不同方向(上、下、前、后、左、右)的纹理图像。它通常用于模拟反射和折射效果。
  1. 数据
  • DataArrayTexture:使用数组作为纹理数据,而不是图像文件。
  • DataTexture:使用二维数组作为纹理数据,而不是图像文件。
  • Data3DTexture:使用三维数组作为纹理数据,而不是图像文件。
  1. 计算
  • DepthTexture:DepthTexture是一个深度纹理,它存储了场景的深度信息。它通常用于模拟反射和折射效果。
  • FramebufferTexture:FramebufferTexture从帧缓冲区中获取纹理数据。它通常用于实现特殊效果,如环境映射或后处理效果。

6. threejs的动画

6.1 threejs的动画效果

对象(对象分组)+ 帧 + 动画属性(动画属性混合效果)+ 动画片段 + 处理函数。在帧上放对象,对象绑定动画属性,构成动画片段,通过不同的方式混合,用播放器控制。

  1. 动画播放器
  • AnimationAction:动画播放器,它允许你控制动画的播放、停止、循环等。你可以通过AnimationAction对象来指定动画的播放速率、是否循环播放等。
  1. 动画片段
  • AnimationClip:定义一个动画片段,它包含了关键帧和插值数据。你可以创建多个AnimationClip对象来定义不同的动画。
  • AnimationMixer:管理多个动画片段的播放和混合。你可以将多个AnimationClip对象添加到AnimationMixer中,并控制它们的播放。
  1. 动画对象分组
  • AnimationObjectGroup:将多个动画对象分组,以便在AnimationMixer中统一控制。你可以将多个AnimationClip对象添加到一个AnimationObjectGroup中,然后将AnimationObjectGroup添加到AnimationMixer中。
  1. 动画处理函数
  • AnimationUtils:包含了一些用于动画处理的实用函数,如创建关键帧、序列化和反序列化动画数据等。
  1. 关键帧
  • KeyframeTrack:定义关键帧轨迹,它包含了关键帧的时间戳和属性值。你可以创建多个KeyframeTrack对象来定义动画的关键帧。
  1. 动画属性值绑定 + 混合多个动画轨迹动画属性
  • PropertyBinding:将动画的属性值绑定到场景中的对象上。你可以创建多个PropertyBinding对象来绑定动画的属性值。
  • PropertyMixer:混合多个动画轨迹的属性值。你可以创建多个PropertyMixer对象来混合动画的属性值。
6.2 threejs的动画关键帧轨道

关键帧轨道类型通过定义不同类型的属性关键帧,创建复杂的动画效果,添加到AnimationClip中,可以创建包含多种属性和变换的动画。

  1. BooleanKeyframeTrack:定义布尔属性的关键帧。例如,对象显隐。
  2. ColorKeyframeTrack:定义颜色属性的关键帧。例如,材质的颜色。
  3. NumberKeyframeTrack:定义数值属性的关键帧。例如,物体的缩放值或位置。
  4. QuaternionKeyframeTrack:定义四元数(Quaternion)属性的关键帧。例如,物体的旋转。
  5. StringKeyframeTrack:定义字符串属性的关键帧。例如,物体材质名称。
  6. VectorKeyframeTrack:定义向量(Vector)属性的关键帧。例如,物体的位置或方向。

02 threejs的加载、渲染、数学计算和辅助方法等

1. threejs的核心

在Three.js中,这些类主要用于处理3D场景中的数据和交互。

  1. BufferAttribute:定义缓冲区中的属性数据,如顶点位置、法线、颜色等。
  2. BufferGeometry:定义3D几何体,包括顶点、法线、UV坐标等,并可以使用BufferAttribute来存储属性数据。
  3. Clock:创建一个时间计时器,通常用于动画和物理模拟。
  4. EventDispatcher:创建一个事件发射器,通常用于监听和触发事件。
  5. GLBufferAttribute:定义一个OpenGL缓冲区中的属性数据,通常与WebGL相关。
  6. InstancedBufferAttribute:定义一个InstancedBufferGeometry中的属性数据,用于渲染多个相同几何体的实例。
  7. InstancedBufferGeometry:定义一个InstancedBufferAttribute中的属性数据,用于渲染多个相同几何体的实例。
  8. InstancedInterleavedBuffer:定义一个InstancedBufferAttribute中的属性数据,用于渲染多个相同几何体的实例。
  9. InterleavedBuffer:定义一个混合属性的InterleavedBufferAttribute,用于渲染多个相同几何体的实例。
  10. InterleavedBufferAttribute:定义一个InterleavedBuffer中的属性数据,通常与WebGL相关。
  11. Layers:创建一个图层管理器,通常用于管理不同图层中的物体。
  12. Object3D:创建一个3D对象,它是所有Three.js对象的基类,用于管理3D对象和属性。
  13. Raycaster:创建一个射线投射器,通常用于检测3D场景中的物体。
  14. Uniform: 定义一个着色器中的统一变量,通常用于存储全局数据。

2. threejs的附加组件

  1. DataUtils:提供了一些数据处理的方法,如解析JSON、序列化对象等。
  2. Earcut:提供了一个方法,用于解析多边形并生成其三角剖分,常用于生成碰撞检测的三角形网格。
  3. ImageUtils:提供了一些与图像相关的实用方法,如加载图像、处理图像数据等。
  4. PMREMGenerator:提供了一个方法,用于生成基于物理的漫反射环境映射(PMREM)。
  5. ShapeUtils:提供了一些与形状相关的实用方法,如生成形状的路径等。

附加组件/核心

  1. Curve:定义了一个曲线对象,可以包含多种类型的曲线,如贝塞尔曲线、样条曲线等。
  2. CurvePath:定义了一个曲线路径对象,可以包含多个曲线对象,用于创建复杂的路径。
  3. Interpolations:提供了一些插值方法,如线性插值、多项式插值等。
  4. Path:定义了一个路径对象,可以包含多个曲线对象,用于创建复杂的路径。
  5. Shape:定义了一个形状对象,可以包含多种类型的形状,如矩形、圆形等。
  6. ShapePath:定义了一个形状路径对象,可以包含多个形状对象,用于创建复杂的路径。

3. threejs的加载器

加载器用法都差不多

const loader = new THREE.ObjectLoader();
loader.load('path/to/object.json', function(object) {// 处理加载到的对象数据
});
  1. 加载器工具
  • Loader:所有加载器的基类。它定义了加载器的接口和基本功能。
  • Cache:简单的缓存系统。存储加载过的资源,以便在需要时快速重用。
  • LoaderUtils:工具方法。处理加载器的数据和资源,如解析JSON、解析OBJ等。
  1. 加载器
  • FileLoader:文件加载器。加载各种类型的文件,如JSON、OBJ、MTL等。它扩展了Loader类,提供了更灵活的文件加载功能。
  • TextureLoader:加载纹理图像。如PNG、JPG等。它是FileLoader的一个子类,专门用于加载纹理。
  • CompressedTextureLoader:加载压缩纹理。如KTX、DDS等。它扩展了TextureLoader,提供了额外的压缩纹理支持。
  • CubeTextureLoader:加载立方体贴图。通常是从六个图片文件中加载。它扩展了TextureLoader,提供了立方体贴图的支持。
  • DataTextureLoader:加载数据纹理。通常是从二进制文件中加载。它扩展了TextureLoader,提供了数据纹理的支持。
  • MaterialLoader:加载材质数据。如JSON、MTL等。
  • ImageBitmapLoader:加载ImageBitmap。它是HTML5 Canvas API的一部分,可以提高图片的加载性能。
  • ImageLoader:加载图片文件。如PNG、JPG等。它是FileLoader的一个子类,专门用于加载图片。
  • BufferGeometryLoader:加载几何体数据,如顶点、法线、UV坐标等。如JSON、OBJ等。
  • ObjectLoader:加载包含几何体、材质、动画等信息的对象数据。如JSON、OBJ等。
  • AnimationLoader:加载动画数据。如GLTF、JSON等。
  • AudioLoader:加载音频文件。如MP3、WAV等。

4. threejs的渲染器

4.1 threejs的渲染器

主要用于与WebGL(Web Graphics Library)进行交互,包括渲染目标、渲染器和其他与渲染相关的对象。

  1. 渲染目标
  • WebGL3DRenderTarget:创建一个3D渲染目标。它可以用来存储渲染的结果,以便在后续的渲染过程中使用。
  • WebGLArrayRenderTarget:创建一个渲染目标数组。它可以用来存储多个渲染目标,每个渲染目标可以存储不同的渲染结果。
  • WebGLMultipleRenderTargets:创建多个渲染目标。它可以用来存储多个渲染目标,每个渲染目标可以存储不同的渲染结果。
  1. 渲染器
  • WebGLRenderer:渲染器类,用于与WebGL进行交互。渲染3D场景的核心类,提供了各种渲染功能和设置。
  • WebGL1Renderer:WebGLRenderer的子类,专门用于渲染使用WebGL1 API的场景。它提供了对WebGL1特性的支持。
  1. 其他与渲染相关的对象
  • WebGLRenderTarget:创建一个渲染目标,存储渲染的结果,以便在后续的渲染过程中使用。
  • WebGLCubeRenderTarget:创建一个立方体贴图渲染目标,用来存储立方体贴图的渲染结果。
4.2 threejs的着色器

着色器是用于控制3D对象外观和行为的关键组件,它们在渲染过程中运行在GPU上。threejs是对WebGL的封装,不管是OpenGL还是WebGL着色器都是重要的部分,都是基于GLSL。所以要先明白一些着色器的基本类型和概念。

着色器的基本类型:顶点着色器(Vertex Shader)、片元着色器(Fragment Shader)、几何着色器(Geometry Shader)。运行顺序:顶点着色器 => 几何着色器 => 片元着色器

  • 顶点着色器:用于处理顶点数据,如位置、颜色、法线等。
  • 几何着色器:顶点数组扩展为多个三角形(建模的基础,不能有四边形,都由三角形组成)
  • 片元着色器:用于处理像素数据,如颜色、透明度等。

threejs的封装:ShaderChunk、ShaderLib、UniformsLib、UniformsUtils

  • ShaderChunk:包含着色器片段的工具类。这些片段可以被重用和组合,以创建复杂的着色器效果。ShaderChunk通常包含一系列着色器代码块,这些代码块可以被加载并用于不同的着色器中。
  • ShaderLib:包含着色器库的工具类。它提供了一系列预定义的着色器片段,这些片段可以被加载并用于不同的着色器中。ShaderLib中的着色器片段通常被设计为可重用的,以便在不同的着色器中使用。
  • UniformsLib:包含统一变量(Uniforms)的库。统一变量是着色器中的全局变量,它们可以在着色器代码中使用,并可以通过JavaScript进行动态设置。UniformsLib提供了一系列预定义的统一变量,这些变量可以被加载并用于不同的着色器中。
  • UniformsUtils:用于处理统一变量的工具类。它提供了一系列方法,用于创建、合并、复制和修改统一变量。UniformsUtils可以帮助开发者更方便地管理和使用统一变量,以创建复杂的着色器效果。

ShaderChunk、ShaderLib常用的着色器片段:

  1. common:包含一些常用的数学函数和常量,如三角函数、矩阵操作等。
  2. morphtarget:包含用于处理变形目标的着色器代码,如变形目标的混合计算。
  3. skinning:包含用于处理皮肤动画的着色器代码,如皮肤权重和矩阵的计算。
  4. shadowmap:包含用于生成阴影映射的着色器代码,如阴影映射的采样和计算。
  5. fog:包含用于处理雾效果的着色器代码,如雾的混合和计算。
  6. lights:包含用于处理光照的着色器代码,如光照的计算和混合。
  7. points:包含用于处理点光源的着色器代码,如点光源的计算和混合。
  8. meshbasic:包含用于基础网格材质的着色器代码,如颜色混合和计算。
  9. meshlambert:包含用于Lambert材质的着色器代码,如Lambert光照的计算和混合。
  10. meshphong:包含用于Phong材质的着色器代码,如Phong光照的计算和混合。

示例:

import * as THREE from 'three';
import { ShaderChunk, ShaderLib } from 'three';const vertexShader = `// 顶点着色器代码${ShaderChunk.common}${ShaderChunk.morphtarget}void main() {// 顶点着色器逻辑${ShaderChunk.morphtarget}gl_Position = projectionMatrix * modelViewMatrix * morphedVertex;}
`;const fragmentShader = `// 片元着色器代码${ShaderChunk.common}${ShaderChunk.fog}void main() {// 片元着色器逻辑gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);}
`;const material = new THREE.ShaderMaterial({vertexShader: vertexShader,fragmentShader: fragmentShader,// 其他材质属性
});

5. threejs的辅助方法

在Three.js中,这些类都是用于辅助显示某些3D对象或属性的工具类。它们通过在场景中添加可视化的表示来帮助开发者理解模型的结构和属性。

  1. ArrowHelper:显示一个箭头,通常用于指示一个向量或法线。
  2. AxesHelper:显示坐标轴,通常用于可视化模型的坐标系统。
  3. BoxHelper:显示一个盒子,通常用于可视化一个Box3对象的范围。
  4. Box3Helper:显示一个Box3对象的范围,通常用于可视化模型的边界。
  5. CameraHelper:显示一个相机的位置和方向,通常用于可视化相机的视角。
  6. DirectionalLightHelper:显示一个方向光的位置和方向,通常用于可视化光线的方向。
  7. GridHelper:显示一个网格,通常用于可视化模型的坐标系统。
  8. PolarGridHelper:显示一个极坐标网格,通常用于可视化模型的极坐标系统。
  9. HemisphereLightHelper:显示一个半球光的位置和方向,通常用于可视化光线的方向。
  10. PlaneHelper:显示一个平面的位置和方向,通常用于可视化模型的平面结构。
  11. PointLightHelper:显示一个点光的位置和方向,通常用于可视化光线的方向。
  12. SkeletonHelper:显示一个骨架的位置和方向,通常用于可视化模型的骨骼结构。
  13. SpotLightHelper:显示一个聚光灯的位置和方向,通常用于可视化光线的方向。

6. threejs的数学计算

在Three.js中,这些类主要用于处理几何形状、颜色、数学运算、变换矩阵、向量、光线和曲线等概念。

  1. Box2:定义一个二维盒子(box),包括最小和最大边界。
  2. Box3:定义一个三维盒子(box),包括最小和最大边界。
  3. Color:表示颜色,可以包含RGB值或HEX值。
  4. Cylindrical:表示一个圆柱体坐标系,包括半径、角度和高度。
  5. Euler:表示一个欧拉角,定义旋转。
  6. Frustum:表示一个视锥体,定义视图的可见区域。
  7. Interpolant:用于在两个值之间进行插值,以平滑过渡。
  8. Line3:表示一个三维空间中的直线,包括两个点。
  9. MathUtils:提供了一系列数学运算的实用方法,如随机数生成、四舍五入等。
  10. Matrix3:表示一个三维空间中的旋转矩阵。
  11. Matrix4:表示一个三维空间中的变换矩阵,包括旋转、缩放和平移。
  12. Plane:表示一个平面,包括法线和距离。
  13. Quaternion:表示一个四元数,定义旋转。
  14. Ray:表示一个三维空间中的光线,包括一个点和一个方向。
  15. Sphere:表示一个球体,包括中心点和半径。
  16. Spherical:表示一个球面坐标系,包括半径、角度和高度。
  17. SphericalHarmonics3:表示一个球谐函数,用于计算环境光照。
  18. Triangle:表示一个三角形,包括三个顶点。
  19. Vector2:表示一个二维空间中的向量。
  20. Vector3:表示一个三维空间中的向量。
  21. Vector4:表示一个四维空间中的向量。
插值

用于处理不同类型的插值(Interpolation)算法,以便在两个值之间平滑地过渡。插值是数学中的一种技术,用于在已知数据点之间创建连续曲线或曲面。

  1. CubicInterpolant:用于在三个控制点之间进行三次多项式插值。
  2. DiscreteInterpolant:用于在两个控制点之间进行线性插值。
  3. LinearInterpolant:用于在两个控制点之间进行线性插值。
  4. QuaternionLinearInterpolant:用于在两个四元数之间进行线性插值。

7. threejs的常量

在Three.js中,这些类用于定义一些常量,以便在代码中使用。这些常量可以包括材质类型、渲染器状态、纹理类型等。详细查看源码/src/constants.js

  1. Animation:定义动画相关的一些常量
  2. Core:定义核心功能相关的一些常量
  3. CustomBlendingEquation:定义自定义混合方程相关的一些常量
  4. Materials:定义材质相关的一些常量,如材质的类型、材质的状态等。
  5. Renderer:定义渲染器相关的一些常量,如渲染器的类型、渲染器的状态等。
  6. Textures:定义纹理相关的一些常量,如纹理的类型、纹理的状态等。

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

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

相关文章

Llama 3下月正式发布,继续开源!

4月10日,Techcrunch消息,Meta在本周伦敦举办的一场活动中确定,下个月将正式发布Llama 3并且继续开源。 Meta全球事务总裁Nick Clegg表示,我们希望在下个月,甚至更短的时间内,正式推出新一代基础模型Llama …

云服务器宝塔ssh:tabby 部署SpringBoot项目

阿里云服务器 ----》 linux 云服务器 , ip , root 密码 tabby -----> ssh 连接工具 ,用这个连接云服务器 去操作 云服务器 宝塔 -------》 可视化工具,快速部署 云服务器的 安装环境 ,部署项目。 tabby :Tabby Terminal 下载…

【华为OD机试】比赛的冠亚季军(深度优先搜索—JavaPythonC++JS实现)

本文收录于专栏:算法之翼 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解代码C/C++题解代码JS题解代码四.代码讲解(Ja…

ubuntu netplan 设置dns

ubuntu netplan 设置dns 要配置netplan,请/etc/netplan/使用.yaml扩展名(例如/etc/netplan/config.yaml)保存配置文件,然后运行sudo netplan apply。此命令解析配置并将其应用于系统。 配置文件格式 参照 这里. eth0:dhcp4: noa…

机器学习和深度学习--李宏毅(笔记与个人理解)Day9

Day9 Logistic Regression(内涵,熵和交叉熵的详解) 中间打了一天的gta5,图书馆闭馆正好npy 不舒服那天天气不好,哈哈哈哈哈总之各种理由吧,导致昨天没弄起来,今天补更! 这里重点注意…

git修改某个远端服务器的地址的方式以及4种remote(git remote set-url origin xxx、git remote -v)

假设本地有1个远端仓库,默认一般叫origin,原来对应的git url是:gitxxx.git # 查看方式: git remote -v# 修改方式: git地址url指定远程仓库:(常用) git remote set-url origin gitn…

面试官:实战中用过CountDownLatch吗?详细说一说,我:啊这...

写在开头 在很多的面经中都看到过提问 CountDownLatch 的问题,正好我们最近也在梳理学习AQS(抽象队列同步器),而CountDownLatch又是其中典型的代表,我们今天就继续来学一下这个同步工具类! CountDownLatc…

机器学习第34周周报VBAED

文章目录 week34 VBAED摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 序列问题阐述3.2 变分模态分解3.3 具有 BiLSTM 和双向输入注意力的编码器3.4 具有 BiLSTM 和双向时间注意力的解码器 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 数据集数据预处…

Redis为什么会变慢

链接: https://pan.baidu.com/s/1PNzhDMqkFBdKUu9_FxA5zw 提取码: euvk

软考中级网络工程师-计算机基础理论与安全-第三节存储技术基础

关于进程与线程的描述中,正确的是:( ) A 进程与线程是相同的概念 B 进程需要存储空间 C 一个线程可包含多个进程 D 线程不需要分时器切换 试题答案 正确答案: B 答案解析 一个运行的程序对应一个进程,需要相应的存储空间。在实际中…

若依 ruoyi-vue 维护Ancestors字段 树转换成List

迁移部门表&#xff0c;没有ancestors字段&#xff0c;若依部门权限没办法做&#xff0c;写了一段代码维护ancestors字段。 调用的若依框架组成树的方法&#xff0c;拼接ancestors public AjaxResult tree() {List<SysDept> depts deptService.selectDeptTree();for (Sy…

以太网数据量大小字符串生成方法(可变单位)

0 前言 当我们想显示以太网数据量大小时&#xff0c;往往有个头疼的单位需要处理&#xff0c;单位取小了不一目了然&#xff0c;单位取大了精度太低。本例设计一个函数&#xff0c;将根据以太网数据量大小自动生成单位可变的字符串&#xff08;KB、MB、GB、TB、PB&#xff09;…

雷军 30 年前的病毒论文,结语最后一句是亮点

在 2023 雷军年度「成长」主题演讲中&#xff0c;他分享了自己在武汉大学设立的三个目标&#xff1a; 两年修完大学所有学分成为优秀的程序员在学报上发论文 对于彼时的在校生来说&#xff0c;在一级学报上发表论文是十分困难的事情&#xff0c;但雷军并没有因困难而畏惧、放…

【植物大战僵尸融合机器学习】+源码

上期回顾&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是植物大战僵尸。 《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵&#xff0c;每种僵尸都有不同的特点&#xff0c;例如铁桶僵尸拥有极强的抗…

VRRP虚拟路由实验(华为)

思科设备参考&#xff1a;VRRP虚拟路由实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种网络协议&#xff0c;用于实现路由器冗余&#xff0c;提高网络可靠性和容错能力。VRRP允许多台路由器…

APP开发_开发一个入门的 H5 APP

1 开发环境的搭建与准备 1.1 安装 Android Studio 下载&#xff1a;首先&#xff0c;从谷歌的安卓开发者网站&#xff08;https://developer.android.google.cn/studio/releases?hlzh-cn&#xff09;下载Android Studio的安装包。在下载页面中&#xff0c;可以根据自己的操作…

前端传参 json 后端处理 反序列化器 boolean转数字 空字符串转null

接口报错-JSON parse error: Cannot deserialize value of type java.lang.Integer from Boolean value 入参是Boolean&#xff0c;接收是Integer&#xff0c;导致报错。 自定义反序列化器&#xff0c;将boolean转integer。 import com.fasterxml.jackson.core.JsonParser;…

llamafactory:unified efficient fine-tuning of 100+ lanuage models

1.introduction llamafactory由三个主要模块组成&#xff0c;Model Loader&#xff0c;Data Worker&#xff0c;Trainer。 2.Efficient fine-tuning techniques 2.1 Efficient Optimization 冻结微调&#xff1a;冻结大部分参数&#xff0c;同时只在一小部分解码器层中微调剩…

【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. MIMO (多输入多输出)&#xff1a;这是一个无线通信系统中使用的技术&#xff0c;其中有多个发送和接收天线。通过同时发送和接收多个数据流&#xff0c;MIMO可以增加数据速率和系统容量&#xff0c;同时提高信号的可靠性。…

建造者模式:构造复杂对象的艺术

在面向对象的设计中&#xff0c;建造者模式是一种重要的创建型设计模式&#xff0c;专门用来构建复杂的对象。它主要目的是将对象的构造代码与其表示代码分离&#xff0c;使同样的构建过程可以创建不同的表示。本文将详细介绍建造者模式的定义、实现、应用场景以及优缺点&#…