这节我们浅谈一下THREE的材质。材质就是物体的皮肤,决定物体的表面。THREE的材质有很多种,他们有的和到相机的距离有关,有的和面的法向量角度有关,有的不受光照的影响,有的受到光照的影响会产生反射效果或者漫反射效果,也可以将多个材质合成一个。
1. THREE.MeshBasicMaterial(基础材料)。
2. THREE.MeshDepthMaterial(深度材料)。
3. THREE.MeshNormalMaterial(法向材料)。
4. THREE.MeshFaceMaterial(面材质)。
5. THREE.MeshLambertMaterial(Lambert材质)。
6. THREE.MeshPhongMaterial(Phong材质)。
7. THREE.LineBasicMaterial(线性基础材质)。
8. THREE.LineDashMaterial(虚线材质)。
接下来我们详细的讲一下这些材质。

1.THREE.MeshBasicMaterial(基础材料)

基础材质非常简单,它不受光照影响。它常用的一些属性如下:
- color 材质的颜色
- wireframe 设置该属性可以将材质设置成线框
- wireframeLinewidth 线框中线的宽度
- wireframeLineLinecap 线框线段端点如何显示

var mesh = new THREE.MeshBasicMaterial({color: 0xffaa00})

2.THREE.MeshDepthMaterial(深度材料)

这种材质不受光照影响,同时也不能设置材质颜色,它只与物体到摄像机的距离有关,越远越暗。它常用的一些属性如下:
- wireframe 是否显示线框
- wireframeLineWidth 线框线的宽度

var material = new THREE.MeshDepthMaterial();

3.THREE.MeshNormalMaterial(法向材料)

这种材料表面颜色只与面的法向量方向决定。它常用的一些属性如下:
- wireframe 设置该属性可以将材质设置成线框
- wireframeLinewidth 线框中线的宽度
- shading 设置着色方法FlatShading表示平面着色SmoothShading表示平滑着色

var material = new THREE.MeshNormalMaterial();

4.THREE.MeshFaceMaterial(面材质)

这是一个材料容器,他可以为每个面设置不同的材料。直接看代码:

var materialArray = [];
materialArray.push(new THREE.MeshBasicMaterial({color: 0x009e60}));
materialArray.push(new THREE.MeshPhongMaterial({color: 0x0051ba}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xffd500}));
materialArray.push(new THREE.MeshLambertMaterial({color: 0xff5800}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xC41E3A}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xffffff}));
var faceMaterial = new THREE.MeshFaceMaterial(materialArray);
var cubeGeom = new THREE.BoxGeometry(3, 3, 3);
var cube = new THREE.Mesh(cubeGeom, faceMaterial);

我们给一个正方体的六个面设置了六个不同的材质。

5.THREE.MeshLambertMaterial(Lambert材质)

它是一种高级材质,可以对光源产生反应创建不光亮的表面。除了上面材料的属性外,还有一些独特的属性,
- ambient 这是材料的环境色,这个颜色会与环境光源叠加的颜色相乘,默认为白色。
- emissive 这是材料的发射颜色,就是不受光照时发出的颜色,默认为黑色。
- wrapAround 开启此属性会让阴影变得柔和,分布均匀。
- wrapRGB 开启此属性,可以使用THREE.Vector3来控制光下降的速度。

var material = new THREE.MeshLambertMaterial({color: 0x7777ff});

6.THREE.MeshPhongMaterial(Phong材质)

这个材料除了MeshLambertMaterial属性外还有一些额外的出行
- specular 指定光照高亮部分的颜色,如果这个颜色与color属性的颜色相同,得到一个类似金属的材质。
- shininess 高亮部分的亮度。
- metal 开启后使材质更像金属。

var material = new THREE.MeshPhongMaterial({color: 0x7777ff});

这个效果非常好

7.THREE.LineBasicMaterial(线性基础材质)

这个材质可以为线设置材质,属性为
- color 定一线的颜色 如果指定vertexColors,这个属性会被忽略
- linewidth 该属性定义显得宽度
- linecap 该属性定义线端点如何显示
- linejoin 该属性定义线连接点如何显示
- vertexColors 将该属性设置成THREE.VertexColors值,可以给每一个定点设置颜色
- fog 设置是否雾化(需开启全局雾化)。

var material = new THREE.LineBasicMaterial({
opacity: 1.0,
linewidth: 1,
vertexColors: THREE.VertexColors
});

8.THREE.LineDashMaterial(虚线材质)

该属性和线性基础材质几乎相同,额外的属性为
- scale 缩放dashSize和gapSize
- dashSize 虚线段长度
- gapSize 虚线空隙长度

var material = new THREE.LineDashedMaterial({
vertexColors: true,
color: 0xffffff,
dashSize: 1,
gapSize: 1,
scale: 4
});

以上就是THREE的材质,具体如何使用我们日后在实战项目中讲解。
转载请注明原文地址 郭志强的博客

初探three.js材质的更多相关文章

  1. 初探原生js根据json数据动态创建table

    初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...

  2. three.js材质

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  3. 初探three.js

    相信大多数选择前端的小伙伴都有一个设计师的梦,今天我来说一说three.js.three.js是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质等各种对象.学习了 ...

  4. 初探three.js几何体-Geometry

    three.js几何体我们还没有说完,这一节我们说一说THREE.Geometry(),简单几何体都是继承了这个对象,使用它会相对麻烦一些,但是可操作性非常高,今天我们使用它制作一个自定义几何体-五角 ...

  5. 初探 Ext JS 6 (sencha touch/ext升级版)

    Sencha Touch 现在已全面升级至Ext Js 6,那么我们如何使用他们呢? 首先去官网下载最新的sdk和帮助文档 sdk下载地址:https://www.sencha.com/product ...

  6. 初探grunt.js

    package.js { "name": "ttd_v3", "version": "0.1.0", "aut ...

  7. 初探flow.js

    第一部分:前言 我们知道JS是弱类型语言,在声明变量时不论是什么类型的变量我们都用var即可,所以js是非常灵活的,但是同时问题就是弱类型语言有可能会出错,比如在调用函数时,且往往在运行起来时才可以检 ...

  8. 前端初学者——初探Modernizr.js Modernizr.js笔记

    什么是Modernizr? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

  9. 初探node.js

    一.定义及优势 定义:Node.js是一个基于 Chrome V8 引擎 的 JavaScript 运行时,它以事件驱动为基础实现了非阻塞模型. 优势:由于Web场景下的大多数任务(静态资源读取.数据 ...

随机推荐

  1. SpringBoot 逻辑异常统一处理

    构建项目 我们将逻辑异常核心处理部分提取出来作为单独的jar供其他模块引用,创建项目在parent项目pom.xml添加公共使用的依赖,配置内容如下所示: <dependencies> & ...

  2. MyBatis的几个重要概念和工作流程

    MyBatis 几个重要的概念 Mapper 配置: Mapper 配置可以使用基于 XML 的 Mapper 配置文件来实现,也可以使用基于 Java 注解的 MyBatis 注解来实现,甚至可以直 ...

  3. php经典设计模式和Trait类代码的复用

    PHP经典设计模式 <?php /** * 单例模式 */ class Site { #定义属性 public $siteName; #定义本类的静态实例 protected static $i ...

  4. 5. SOFAJRaft源码分析— RheaKV中如何存放数据?

    概述 上一篇讲了RheaKV是如何进行初始化的,因为RheaKV主要是用来做KV存储的,RheaKV读写的是相当的复杂,一起写会篇幅太长,所以这一篇主要来讲一下RheaKV中如何存放数据. 我们这里使 ...

  5. UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计

    也是之前写的控件了,模仿NetFlix的河的设计. 大体要求如下: 1. 横向的ListView 2. 左右按钮,可以左右移动河卡片,左右的滚动条不可见 3. 左右按钮仅在鼠标Hover事件中可见 大 ...

  6. python学习之【第十一篇】:Python中的文件操作

    1.前言 在Python中,对文件的操作主要遵循以下流程: 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 2.打开文件 使用open函数,可以打开一个已经存在的文件,或 ...

  7. 同余类BFS的一些瞎吹

    同余类BFS的题,是个OIer基本上都会见过一些,最好的例子就是NOIP 2018 day1  T2---货币系统 虽然这题其实是什么背包就能解决的题目,但数据一变大,出题人坏一点,就没了.... 同 ...

  8. 使用 element-ui 级联插件遇到的坑

    需求描述[省市区三级联动] 组件:Cascader 级联选择器 后端需要所选中的地区的名字,如:['北京市', '北京市', '东城区'] 获取后端省市区具体列表的接口返回数据: // 省 - 参数1 ...

  9. mysql cpu使用率过高解决方法

    mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...

  10. css3的过渡和动画的属性介绍

    一.过渡 什么是过渡? 过渡是指:某元素的css属性值在一段时间内,平滑过渡到另外一个值,过渡主要观察的是过程和结果. 设置能够过渡的属性: 支持过渡的样式属性,颜色的属性,取值为数值,transfo ...