three.js之材质

材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性。通过设置材质可以改变物体的颜色、纹理贴图、光照模式等。它也是三维物体的皮肤,决定其外观效果,例如一个物体的透明度、颜色和反光度等效果。

three.js提供了哪些材质?

1.基础材质MeshBasicMaterial,渲染后物体的颜色始终为该材质的颜色,而不会由于光照产生明暗、阴影效果。如果没有指定材质的颜色,它的颜色就是随机的。


2.深度材质MeshDepthMateria,根据网格到相机的距离,该材质决定如何给网格染色 ,根据物体上每一点到摄像机的远近来显示颜色,远的显示黑色,近的显示白色


3.法向材质MeshNormalMaterial,根据物体表面的法向量计算颜色 ,决定光的发射方向、在计算光照、阴影时提供信息、为物体表面上色。法向量所指的方向决定每个面从MeshNormalMaterial材质获取的颜色。在平面上添加表示法向量的箭头:使用THREE.ArrowHelper。

4.朗伯材质MeshLambertMaterial,考虑光照的影响,可以创建颜色暗淡,不光亮的物体 。ambient:对环境光的反射能力 ,和AmbientLight光源一起使用。该颜色会与AmbientLight光源的颜色相乘。默认是白色。 emissive:该材质发射的属性。材质的自发光颜色,可以用来表现光源的颜色 。不像是光源,只是一种纯粹的、不受其他光照影响的颜色。默认是黑色。Lambert 材质(MeshLambertMaterial)是符合 Lambert 光照模型的材质。 Lambert 光照模型的主要特点是只考虑漫反射而不考虑镜面反射的效果,因而对于金属、镜子等需要镜面反射效果的物体就不适应,对于其他大部分物体的漫反射效果都是适用的。

Idiffuse = Kd * Id * cos(theta) ,Idiffuse 是漫反射光强, Kd 是物体表面的漫反射属性, Id 是光强, theta 是光的入射角弧度。

5.phong式材质MeshPhongMaterial,考虑光照的影响,可以创建光亮的物体 。对于金属、镜面的表现尤为适合。 specular:指定该材质的光亮程度及其高光部分的颜色。如果将他设置成跟color属性相同的颜色,将会得到一种更加类似金属的材质。如果设置为灰色,材质将变得更像塑料。


Ispecular = Ks * Is * (cos(alpha)) ^ n ,Ispecular 是镜面反射的光强, Ks 是材质表面镜面反射系数, Is 是光源强度,alpha 是反射光与视线的夹角, n 是高光指数,越大则高光光斑越小。 shininess 属性控制光照模型中的 n 值。

6.面材质MeshFaceMaterial,这是一种容器,可以在该容器中为物体的各个表面上设置不同的颜色 。

7.着色器材质ShaderMaterial,使用自定义的着色器程序,直接控制顶点的放置方式,以及像素的着色方式。个人觉得这个比较复杂,但是应用应该比其他几种都要广泛一点,需要一些webGL的基础。

8.粒子材质SpriteMaterial,适用于粒子系统,用来模拟雪花小雨什么的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 代理 代理是一对一的关系. delegate 需要定义协议方法并且实现协议方法,会使代码结构变复杂. delega...
    GF极客天涯阅读 3,677评论 0 0
  • 因工作原因,每周会去某项目一次工作例会,无非就是分析总结项目每周工作情况及下周项目的工作计划,同时也会经常处理一些...
    冰红茶麻麻阅读 3,641评论 10 32
  • 时间:20150816 地点:YY 事件:(起因、经过、结果、感受) 自己上周第一次参加完俱乐部线下活动核心组织的...
    楠ancy阅读 2,669评论 0 1
  • 那个曾经被一群女孩子骂着,你怎么不去死的女孩,就是我,真的,那个曾经被人用语言暴力击倒的女孩,那个懦弱的女孩就是曾...
    拜星月慢阅读 3,641评论 28 16
  • 当咖啡屋里开辟“夏天的故事"以来,往日的种种争战就有浮现在眼前。《盛夏的洗礼》已经交稿,记录了我受洗时经历...
    蕊玉阅读 2,744评论 2 4