`

THREE.JS中常用的3种材质

 
阅读更多

THREE.JS中常用的3种材质

发表于2016/5/15 16:26:01  7746人阅读

分类: three-js javascript

总序

材质和几何体构成网格,决定几何体是否像金属,透明与否,已经是否显示成线框。

  • MeshBasicMaterial:对光照无感,给几何体一种简单的颜色或显示线框

  • MeshLambertMaterial:这种材质对光照有反应,用于创建暗淡的不发光的物体

  • MeshPhongMaterial:这种材质对光照也有反应,用于创建金属类明亮的物体

材质的共有属性

材质虽然可能有不同的分类,但是都是材质啊,还是有共性的地方,共有属性体现在基础属性,融合属性,高级属性三个方面。这三个方面其实是THREE.Material这个基类的属性。

THREE.Material的基础属性

列出一些常用的

———-

  • ID:标识材质
  • name: 名称
  • opacity:透明度,结合transparent使用,范围为0~1
  • transparent:是否透明,如果为true则结合opacity设置透明度。如果为false则物体不透明
  • visible:是否可见,false则看不见,默认可以看见
  • side:侧面,觉得几何体的哪一面应用这个材质,默认为THREE.FrontSide(前外面),还有THREE.BackSide(后内面)和THREE.DoubleSide(两面)
  • needUpdate:如果为true,则在几何体使用新的材质的时候更新材质缓存

———-

THREE.Material的融合属性

总结起来,不常用

———-

  • blending :觉得物体的材质如何和背景融合,默认值为NormalBlending,这种情况下只显示材质的上层
  • blendsrc:除了标准融合外,还可以通过指定融合源,融合目标,和融合公式,创建自定义的融合模式,默认SrcAlphaFactor,即alpha通道进行融合
  • blenddst:默认OneMinusAlphaFactor,定义目标的融合方式,默认也使用alpha通道融合
  • blendingequation:融合公式,指定如何使用融合源和融合目标,默认为addEquation,即将颜色想加

———-

THREE.Material的高级属性

不常用,因为没有用过啊

THREE.MeshBasicMaterial 基础网格材质

使用这种材质的网格,通常被渲染成简单的多边形,而且可以选择想要线框。除了一些THREE.Material的属性以外,还有如下属性

  • color:设置材质的颜色
  • wireframe:如果为true,则将材质渲染成线框,在调试的时候可以起到很好的作用
  • wireframeLinewidth:wireframe为true时,设置线框中线的宽度
  • wireframeLinecap:决定线框端点如何显示,可选的值 round,bevel(斜角)和miter(尖角)。
  • vertexColors:通过这属性,定义顶点的颜色,在canvasRender中不起作用。
  • fog:决定单个材质的是否受全局雾化的影响。 
    值得一提的是: 
    对于fog属性,在全局中如果设定了雾化属性,那么本应该对所有场景的物体都添加雾化效果。
scene.fog=new THREE.Fog(0xffffff,0.015,100)
  • 1

而如果在当前材质中设置的如

var cubeGeo= new THREE.CubeGeometry(30,30,30);
var cubeMat= new THREE.MeshBasicMaterial({color:"0x0c0c0c",fog:false})
var cude= new THREE.Mesh(cubeGeo,cubeMat);
scene.add(cube);
  • 1
  • 2
  • 3
  • 4

则在当前这个cude方块中,并不能体现雾化效果

Code

        var cubeGeometry = new THREE.BoxGeometry(15, 15, 15);
        var meshMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff});
        var cube = new THREE.Mesh(cubeGeometry, meshMaterial);
        //meshMaterial.wireframe=true;
  • 1
  • 2
  • 3
  • 4

有无wireframe的区别如下面2图所示 
这里写图片描述

这里写图片描述

THREE.MeshLambertMaterial暗淡不发光

该材质对光源有反应,除了之前说过的color,transparent,opacity,fog等属性,还有一些特有的属性,总结起来就只有2个

  • ambient:设置材质的环境色,和AmbientLight光源一起使用,这个颜色会与环境光的颜色相乘。即是对光源作出反应。
  • emissive:设置材质发射的颜色,不是一种光源,而是一种不受光照影响的颜色。默认为黑色

Code

代码和上面的基本类似

        var cubeGeometry = new THREE.BoxGeometry(15, 15, 15);
        var meshMaterial = new THREE.MeshLamebertMaterial({color: 0x7777ff});
        var cube = new THREE.Mesh(cubeGeometry, meshMaterial);
  • 1
  • 2
  • 3

但是渲染出来的结果却不太一样 
这里写图片描述

THREE.MeshPhongMaterial金属发亮的物体

该材质对光源有反应,除了之前说过的color,transparent,opacity,fog等属性,还有一些特有的属性,总结起来有4个

  • ambient:设置材质的环境色,和AmbientLight光源一起使用,这个颜色会与环境光的颜色相乘。即是对光源作出反应。
  • emissive:设置材质发射的颜色,不是一种光源,而是一种不受光照影响的颜色。默认为黑色
  • specular:指定该材质的光亮程度及其高光部分的颜色,如果设置成和color属性相同的颜色,则会得到另一个更加类似金属的材质,如果设置成grey灰色,则看起来像塑料
  • shininess:指定高光部分的亮度,默认值为30.

Code

代码类似 只贴出其中一点点

        var meshMaterial = new THREE.MeshPhongMaterial({
        color: 0x7777ff,
        specular:0x7777ff,
        shininess:30
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

分享到:
评论

相关推荐

    Three.js模型包

    5. **网格(Mesh)**:网格是将几何体和材质结合在一起的实体,是Three.js中最常用的3D对象。它由几何体和材质共同组成,通过`new THREE.Mesh(geom, mat)`创建。 6. **光源(Light)**:光源对3D场景至关重要,它们...

    三维模型-three.js-PCD模型文件,用于three.js显示pcd文件

    在三维可视化领域,Three.js是一个非常流行的JavaScript库,它允许开发者在Web浏览器中创建和展示复杂的3D模型。本资源是关于使用Three.js处理PCD(Point Cloud Data)模型文件的,这是一种常见的3D点云数据格式。在...

    Three.js 实现年会3D抽奖页面

    Three.js是一个基于WebGL的JavaScript库,它允许开发者在浏览器中创建丰富的3D图形和交互式体验。 首先,我们需要理解Three.js的核心概念。WebGL是一种在浏览器中渲染3D图形的API,而Three.js则是对WebGL的一层封装...

    three.js 智慧城市模型

    Three.js 是一款基于 WebGL 的 JavaScript 库,用于在浏览器中创建三维图形和动画,它在构建智慧城市模型中扮演了核心角色。本文将深入探讨如何利用 three.js 来创建智慧城市的虚拟表示,并介绍与之相关的技术知识点...

    three. js的人体解剖图.zip

    Three.js 是一个基于 WebGL 的 JavaScript 库,它为Web开发人员提供了一个在浏览器中创建3D图形的强大工具。这个“three.js的人体解剖图”压缩包,很显然是一个利用Three.js库来展示人体结构的3D可视化项目。下面...

    three.js & three.min.js

    标题提及的是"three.js & three.min.js",这指的是一个非常流行的JavaScript库,专门用于在Web浏览器中创建3D图形。Three.js是一个强大的框架,它简化了WebGL(Web图形库)的使用,使开发人员能够轻松地在网页上构建...

    Three.js实战常用技巧课程

    课程分享——Three.js实战常用技巧,完整版视频课程下载。 课程概述 一、适合有一定的three.js基础学员学习。 二、每节课都有对应的案例源码(有注释) 三、本课程主要针对...第12章 threejs工程化开发(Web前端Vuejs)

    three.js渲染钻石demo

    Three.js是一个基于WebGL的JavaScript库,它允许开发者在浏览器中创建和展示复杂的3D场景。本项目名为“three.js渲染钻石demo”,其主要目标是利用three.js库来呈现一个逼真的钻石模型。 **描述:“three.js+glsl...

    three.js 源码解析

    `THREE.PerspectiveCamera`是最常用的一种,用于模拟真实世界的透视效果。 3. **Geometry(几何体)**:几何体是3D模型的基本构建块,可以是简单的形状(如立方体、球体),也可以是自定义的复杂形状。`THREE....

    three.js 引用3dmax 导出的obj与mtl文件及相关模块操作

    three.js是一个广泛使用的JavaScript库,专为在Web浏览器中创建3D图形而设计。以下是对这个主题的详细讲解: 首先,我们需要理解.obj和.mtl文件的含义。.obj文件是一种常见的3D模型格式,用于存储顶点、面、纹理...

    three.js+websockt多人射击游戏.zip

    three.js是一个开源的JavaScript库,用于在Web浏览器中创建和展示三维图形。它简化了WebGL接口的复杂性,提供了丰富的对象模型、光照、材质等特性,使得开发者可以轻松地创建出绚丽的3D场景。 在本项目中,three.js...

    Three.js fbx文件导入 源码

    在Three.js中,导入FBX(Autodesk FBX)文件是一项常见的任务,因为FBX是一种广泛使用的三维模型格式,支持动画、材质、骨骼等复杂数据。Three.js是一个基于WebGL的JavaScript库,它允许开发者在浏览器中创建和展示...

    基于three.js 和ArcGIS JS API meshline

    3. 将这些数据转换为Three.js能理解的格式,例如创建新的几何体(Geometry)和材质(Material)。 4. 创建MeshLine对象,根据地图数据设置其路径和属性。 5. 将MeshLine添加到Three.js的场景中,并确保其与地图的...

    自己写的 three.js 导入模型 高德三维导入模型

    3. **几何体与材质**:Three.js提供多种预定义的几何体(如BoxGeometry、SphereGeometry等),以及各种材质(如MeshBasicMaterial、MeshLambertMaterial等)来定义物体的外观。 二、模型导入 1. **模型格式**:常见...

    Three.js是基于原生WebGL封装运行的三维引擎-three.js

    此外,还可以使用网格模型(Mesh)将几何体和材质组合,网格模型是Three.js中最常用的基础3D对象。 光照(Light)是塑造3D场景的关键因素。Three.js支持多种类型的灯光,包括点光源(PointLight)、平行光...

    vue使用three.js引入外部obj,mtl模型.zip

    在Vue.js应用中集成Three.js库来加载外部的3D模型,如.obj和.mtl文件,是一种常见的增强网页3D视觉效果的方法。Three.js是一个强大的JavaScript库,它为WebGL提供了一个简单易用的接口,使得在浏览器中创建复杂的3D...

    three.js.master

    5. **网格(Mesh)**:结合几何体和材质的对象,是Three.js中最常用的3D对象类型。由几何体和材质组成的网格可以被添加到场景中,并进行渲染。 6. **光源(Light)**:对场景中的对象产生照明效果,如点光源、聚光...

    Learning Three.js The JavaScript 3D Library for WebGL(2nd)英文版

    3. **材质与着色器**:Three.js提供了多种材质类型(如MeshBasicMaterial、MeshPhongMaterial、MeshLambertMaterial等),它们控制物体的表面外观。此外,Three.js还支持自定义着色器,可以使用GLSL语言编写,实现更...

    three.js解析BIM中间数据JSON(源代码)

    在IT行业中,尤其是在3D建模和可视化领域,BIM(建筑信息模型)与WebGL库如Three.js的结合越来越常见。本主题聚焦于如何利用Three.js解析BIM中间数据的JSON格式,以便在Web环境中展示Revit模型。Three.js是一个强大...

    three.js教程

    Three.js是JavaScript的一个开源库,专门用于在Web浏览器中创建和展示三维图形。这个库基于 WebGL 技术,一个基于OpenGL标准的JavaScript API,它允许开发者在无需插件的情况下,在网页上实现高性能的3D渲染。本教程...

Global site tag (gtag.js) - Google Analytics