材质(Material)和几何体(Geometry)
1. 材质
一个材质结合一个几何体可以组成一个mesh对象。材质就像物体的皮肤,决定了几何体的外表。例如:皮肤定义了一个几何体看起来是否像金属、透明与否,或者显示为线框。
基本的材质如下:

1.属性介绍
1.1基础属性
这些属性是所有材质共有的。通过这些属性可以设置材质的透明度、是否可见以及如何被引用(ID或自定义名称)。


1.2.融合属性
融合决定了渲染的颜色如何与它们的后面的颜色交互。

1.3高级属性
这些属性与WebGL内部工作有关,如下:

2.基本的网格材质
设置材质属性的方法有两种,一种是通过构造函数传入参数的形式,如下
var meshMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff});
第二种是通过修改属性的方法设置:
var meshMaterial = new THREE.MeshBasicMaterial();
meshMaterial.color = new THREE.Color(0x7777ff);
meshMaterial.name="xxx";
2.1 THREE.MeshBasicMaterial
一种非常简单的材质,不考虑场景中的光照的影响。使用这种材质的网格会被渲染成简单的平面多边形,而且可以显示几何体的线框。除了上面的公共属性还可以设置下面的属性:

2.2 THREE.MeshDepthMaterial
这种材质其外观不是由光照或某个属性决定的,而是由物体到摄像机的距离决定的。可以将这种材质与其他材质结合使用,从而很容易地创建出逐渐消失的效果。其特有属性如下:

3.高级材质 (光亮的和暗淡的材质)
THREE.MeshLambertMaterial和THREE.MeshPhongtMaterial材质会对光源做出反应,并且分别用来创建暗淡的材质和光亮的材质。
3.1THREE.MeshLambertMaterial 创建暗淡材质
创建暗淡的但是并不光亮的表面。会对光源产生影响。其特有的属性如下:

3..2 THREE.MeshPhongtMaterial创建光亮的材质
与上面基本一样,只是用于创建光亮的材质。其基本属性如下:


总结:
不是所有的材质都能对场景中的光源产生反应,如果希望一个材质计算光照的影响,应该使用高级材质(THREE.MeshLambertMaterial和THREE.MeshPhongtMaterial) 。
材质的大部分属性在运行时可以修改,但是有一些属性(例如side)不能修改。如果需要修改这些属性的值,需要将needsUodate属性设置为true。
2. 几何体 (重要)
材质决定物体的外观,几何级决定了物体的形状,Three.js提供的几何体有:
基本的几何体:

高级几何体:


1.THREE.JS提供发基本几何体
基本的有二维几何体:THREE.CircleGeometry,THREE.RingGeometry和THREE.PlanGeometry、ShapeGeometry。
1.1二维几何体:
二维几何体,看上去是扁平的,只有两个维度。
(1)THREE.PlaneGeometry(10, 14, 4, 4) 创建二维平面几何体
其属性如下:

(2)THREE.CircleGeometry(4, 10, 0.3 * Math.PI * 2, 0.3 * Math.PI * 2) 创建圆形或者扇形
其属性如下:


创建一个完整的圆的代码如下:
new THREE.CircleGeometry(,)
创建一个半圆的代码如下:
new THREE.CircleGeometry(3,12,0,Math.PI)
(3)THREE.RingGeometry() 创建类似于圆的图形
其参数如下:

(4)THREE.ShapeGeometry 自定义二维几何体
1.2 三维几何体
1.THREE.BoxGeometry 立方体几何体 (重要)
创建一个长方体只需要指定宽度高度和深度就可以,属性如下:

例如:
new THREE.BoxGeometry(10, 10, 10, 1, 1, 1)
如下:

2. THREE.SphereGeometry(4, 10, 10) 创建球体
创建三维球体,属性如下:

3.new THREE.CylinderGeometry(20, 20, 20) 创建类似于圆柱体
属性如下:

总结:
开始创建几何体时,不要直接使用那些复杂的材质,可以从简单的BasicMaterial开始,并将wireframe属性设为true,或者使用NormalMaterial。
对于二维图形,重要的是记住它们放置在x-y平面上的。如果想拥有一个水平的二维图形,那么需要将x轴旋转-0.5*Math.PI。如果要旋转一个二维图形或者一个开放的三维图形,记住需要将材质设置成THREE.DoubleSide,如果不这么做,那么几何体的内侧或背面将会不可见。
材质(Material)和几何体(Geometry)的更多相关文章
- Unity -- 材质-Material和预设体-Prefabs
材质(Materials)用来把网格(Mesh)或粒子渲染器(Particle Renderers)贴到游戏对象上.他们在定义对象怎么被显示发挥重要组成部分.材质包括用于呈现网状或颗粒着色器的参考,所 ...
- 初探three.js几何体-Geometry
three.js几何体我们还没有说完,这一节我们说一说THREE.Geometry(),简单几何体都是继承了这个对象,使用它会相对麻烦一些,但是可操作性非常高,今天我们使用它制作一个自定义几何体-五角 ...
- 自己主动生成材质Material(Unity3D开发之十九)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 ...
- 自动生成材质Material(Unity3D开发之十九)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 ...
- Threejs中的材质贴图
最近项目需要折腾three.js,有关three.js几点说明 1.作用 threejs适合创建简单的模型视图 2.对于复杂的模型图(如:室内模型图)需要美术3D制作,前端导成特定格式文件(如*.mt ...
- Three.js开发指南---使用three.js的材质(第四章)
材质就像物体的皮肤,决定了几何体的外表,例如是否像草地/金属,是否透明,是否显示线框等 一 材质 THREE.js的材质分为多种,Three.js提供了一个材质基类THREE.Material, 该基 ...
- Three.js三维模型几何体旋转、缩放和平移
创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ...
- ThreeJS学习6_几何体相关(BufferGeometry)
ThreeJS学习6_几何体相关(BufferGeometry) 使用 BufferGeometry 可以有效减少向 GPU 传输几何体相关数据所需的开销 可以自定义顶点位置, 面片索引, 法向量, ...
- Cesium原理篇:Material
Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网站,我觉得他写的已经够好了.在开始普及概念前,推荐一首我此刻想到的歌<光---陈粒>. ...
随机推荐
- 文本编辑器vim——三种模式、显示行号、插入命令、行快速定位、行内定位
1.vim的三种工作模式: (1)利用vim命令新建文件: 点击entre键执行命令后,开始向文本中输入想要写入的内容: (2)命令行模式(ESC): 不管用户处于何种模式,只要单击Esc键,即可进入 ...
- 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed
题目描述 最大化平均值 二分一个\(x\) \(check\): \(\frac{F+\sum_{i=1}^{n} X_{i} \times F_{i}}{M+\sum_{i=1}^{n} X_{i} ...
- python range 和xrange
对于这两个好像功能都差不多,这两个经常会被搞混,所以今天一定要把这个完全弄清楚. 首先我们看看range: range([start,] stop[, step]),根据start与stop指定的范围 ...
- 分析WordPress数据表之评论表(功能篇)
数据表分析 wp_comments(评论表) 该表字段,如下:comment_ID(评论ID)comment_post_ID(评论文章ID)comment_author(评论者用户名)comment_ ...
- 灵活的MyBatis
一.前言 将数据存储到数据库是开发中很重要的一环.曾经有程序员说自己做过最牛逼的事情就是增删改查.确实我们做了很多页面,后太代码写了很多,可是最终都离不开数据库的增删改查.Java有一套自己的JPA标 ...
- centos7安装hadoop2.7.7
下载hadoop-2.7.7 网址如下 https://www-eu.apache.org/dist/hadoop/core/ 移动到/opt 路径下 在/opt下新建一个文件夹,名为app mkdi ...
- Linux 删除文件未释放空间问题处理,下清空或删除大文件
linux里的文件被删除后,空间没有被释放是因为在Linux系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么 ...
- Java Thread dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on conditio ...
- SpringMvc的 @Valid 拦截到的异常如何抛出
SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用 @NotBlank( message = "昵称不能为空")@NotNull( message ...
- Delaunay和Voronoi
什么是Delaunay三角剖分? 图1:Delaunay三角剖分偏爱小角度 给定平面中的一组点,三角剖分指的是将平面细分为三角形,这些点为顶点.在图1中,我们在左侧图像上看到了一组地标,在中间图像上看 ...