准备
1 | 1、准备 |
实例
1 |
|
three.js基础知识
1 | 一个场景想要显示任何东西,需要三种类型的组件 |
THREE.Color 颜色类的方法
创建基础对象
1 | 创建颜色 |
相机
透视相机
正交相机
相机切换控制器
1 | var trackballControls |
切换相机视角
1 | camera.lookAt(new THREE.Vector3(x, 10, 0)); |
光源
没有光源,渲染的场景将不可见(除非你使用基础材质或线框材质)
-Three.js中可用的光源。
-特定光源使用的时机。
-如何调整和配置所有光源的行为。
-简单地介绍如何创建镜头光晕。
◆THREE.PointLight、THREE.SpotLight和THREE.DirectionalLight的主要区别
THREE.PointLight从特定的一点向所有方向发射光线。
THREE.SpotLight从特定的一点以锥形发射光线。
THREE.DirectionalLight不是从单个点发射光线,而是从二维平面发射光线,光线彼此平行。
简单的光源
1 | 前四个为简单基础光源。所有这些光源都是基于THREE.Light对象扩展的,这个对象提供公用的功能 |
1 | 创建聚合灯光源 |
THREE.SpotLight的所有属性
1 | 3、 THREE.PointLight |
1 | 4、THREE.DirectionalLight |
特殊光源
1 | 1、THREE.HemisphereLight |
材质
Three.js 材质就像物体的皮肤,决定了几何体的外表
材质的共性
1 | 基础属性:图1 |
基础属性
融合属性
高级属性
简单网格材质
1 | //MeshBasicMaterial、MeshDepthMaterial和MeshNormal-Material |
除了上述的共性之外它还能这是这些属性
1 | var material = new THREE.MeshBasicMaterial({color: 0xff0000}) |
融合材质
1 | 看看THREE.MeshDepthMaterial的属性,你会发现没有选项可以用来设置方块的颜色。一切都是由材质的默认属性决定的。但是,Three.js库可以通过联合材质创建出新效果 |
高级材质
1 | 5、THREE.MeshLambertMaterial |
基础的属性
额外的属性
线性几何体的材质
1 | 10、THREE.Line(线段) |
1 | 12、THREE.LineDashedMaterial |
几何体
1 | 1、THREE.CircleGeometry(圆形) |
二维几何体
1 | 二维几何体看上去是扁平的,顾名思义,它们只有两个维度。 |
1 | 4、THREE.ShapeGeometry |
三维几何体
1 | 1、THREE.BoxGeometry |
1 | 3、THREE.CylinderGeometry |
1 | 4、THREE.ConeGeometry |
1 | 5、THREE.TorusGeometry |
1 | 6、THREE.TorusKnotGeometry |
1 | 7、THREE.PolyhedronGeometry |
1 | 8、THREE.IcosahedronGeometry |
高级几何体及二元操作
1 | 1、THREE.ConvexGeometry |
通过拉伸创建几何体
1 | Three.js提供了几种方法,让我们可以从一个二维图形拉伸出三维图形。拉伸指的是沿着z轴拉伸二维图形,将它转换成三维图形。例如,如果我们拉伸THREE.CircleGeometry,就会得到一个类似圆柱体的图形;如果我们拉伸THREE.PlaneGeometry,就会得到一个类似方块的图形。 |
1 | 2、THREE.TubeGeometry |
从SVG拉伸
1 | SVG跟Three.js处理图形的方式非常一致 |
1 | 3、THREE.ParametricGeometry |
三维文本
1 | var loadFont; |
自定义字体
1 | 如果你想渲染二维文字并用作材质的纹理,那么你就不应该使用THREE.TextGeometry |
构造实体几何体(Constructive Solid Geometry,CSG)的技术
1 | ThreeBSP库,该库使用二元操作创建出相交、相减和联合等非常有趣的几何体。 |
粒子和精灵
1 | 粒子和精灵。使用THREE.Points(有时也叫作精灵(sprite)),可以非常容易地创建很多细小的物体,用来模拟雨滴、雪花、烟和其他有趣的效果。例如,你可以将整个几何体渲染成一组粒子,并分别控制它们。 |
使用HTML5画布样式化粒子
1 | Three.js提供了三种使用HTML5画布来样式化粒子的方法 |
THREE.SpriteCanvasMaterial 这种材质上的属性
使用纹理样式化粒子
1 | THREE.TextureLoader().load() |
使用精灵贴图
1 | 精灵贴图中包含多个图像,通过移动缩放显示精灵贴纸来改变图像内容 |
加载高级网格和几何体
从高级几何体创建THREE.Points
1 | THREE.Points基于几何体的顶点来渲染每个粒子.我们就可以基于这个几何体的顶点创建出一个THREE.Points对象 |
创建、加载高级网格和几何体
1 | 1、组合和合并。 |
支持一下外部格式资源
Blender
1 | 有很多三维软件可以用来创建复杂的网格。其中有一个流行的开源软件叫作Blender(www.blender.org)。Three.js库有一个Blender(以及Maya和3D Studio Max)导出器,可以直接将文件导出为Three.js的JSON格式 |
导入三维格式文件
1 | 1、OBJ和MTL格式 |
创建动画和移动摄像机
1 | 基础动画。 |
基础动画
1 | 1、通过requestAnimationFrame,改变属性 |
使用摄像机
1 | Three.js提供了一些摄像机控件,使用这些控件,你可以控制场景中的摄像机 |
ragControls控件类
1 | 它虽然也叫作控件但却与其他摄像机控件不同。当用鼠标在场景中拖动时,这个控件会移动场景中的物体而不是摄像机。 |
1 | 1、轨迹球控制器 |
变形动画和骨骼动画
1 | 当你使用外部软件(如Blender)创建动画时,通常会有两种主要的动画定义方式 |
使用外部模型创建动画
1 | -带有JSON导出器的Blender |
加载和使用纹理
1 | 1、加载纹理并应用到网格 |
纹理的高级用途
1 | 1、自定义UV映射 |
自定义着色器和后期处理
1 | -不是所有通道的处理结果都会显示在屏幕上。如果想要将通道处理结果输出到屏幕上,你可以使用THREE.ShaderPass和THREE.CopyShader。[插图]效果组合器中通道的顺序是很重要的,因为后一个通道是在前一个通道处理结果的基础上进行处理的。 |
在场景中添加物理效果和声音
1 | 1、Physijs库,通过该库我们可以添加重力、碰撞和约束等 |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/jsplugin/treejs/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!