手机版

三个js学习的兰博和Phong资料

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

材质是与渲染效果相关的属性,与对象顶点信息无关。您可以更改颜色、纹理贴图、照明模式等。通过设置材料来描述物体。

MeshBasicMaterial:对光照不敏感,给几何体一个简单的颜色或显示线框。

MeshLambertMaterial:这种材料对光有反应,用于创建暗淡和不发光的对象。

网状材料:这种材料也对光有反应,用于制造明亮的金属物体。

1.碱性材料

对于由基本材质制成的对象,渲染对象的颜色将始终是材质的颜色,并且不会因光照而产生明暗效果。如果没有指定材质颜色,则颜色是随机的。它的构造函数是:

三个。MeshLambertMaterial(opt),其中opt可以是默认值或包含各种属性的值。例如,创建不透明度为0.75的新黄色材质:

新的三。mesh basicmaterial({ color :0x ffff 00,opa city 3360 0.75 });将其应用于立方体(方法见《Three.js学习之几何形状》,效果为:

源代码:

!doctype HTML HTML Head Metacharset=' UTF-8 ' Title 3 . js Test 7.1/Title/Head Body Onload=' init()' Canvas ID=' Main Canvas ' Width=' 400 px ' Height=' 300 px '/Canvas/Body脚本类型=' text/JavaScript ' src=' http 3360 js/THREE . min . js '/脚本脚本脚本类型=' text/JavaScript ' function init(){ var renderer=new THREE。WebGLRenderer({ canvas : document . getelementbyid(' mainCanvas ')});renderer . SetClearColor(0x 000000);var场景=新三。场景();//相机var camera=new THREE。正投影摄像机(-5,5,3.75,-3.75,0.1,100);camera.position.set(25,25,25);相机。看(新的三。Vector3(0,0,0));scene.add(摄像机);//light var light=new THREE。PointLight(0xffffff,1,100);light.position.set(10,15,5);场景添加(光);var material=new THREE。mesh basicmaterial({ color :0x ffff 00,opa city 3360 0.75 });var cube=new THREE。网状(新三。立方体几何(5,5,5),材料;scene.add(立方体);renderer.render(场景、摄像机);} /script/html BasicMaterial的几个常用属性:

可见:无论是否可见,默认为真

侧面:渲染补丁的正面或背面,默认为正面三。正面,可以设置为背面三。背面或双三。双面

线框:是否渲染线而不是面,默认值为假

颜色:十六进制RGB颜色,如红色,为0xff0000

贴图:使用纹理贴图

对于基础材质来说,即使场景中的光源发生了变化,使用该材质的物体在任何地方都将始终具有相同的颜色。当然,这不是很逼真,所以我们将介绍更逼真的照明模型:Lambert照明模型和Phong照明模型。

2.朗伯材料和峰材料

朗伯材料是符合朗伯照明模型的材料。Lambert光照模型的主要特点是只考虑漫反射而不考虑镜面反射的影响,因此不适用于需要镜面反射的物体,如金属和镜子,适用于大多数其他物体的漫反射效果。

光照模型的公式为:

Idiffuse=Kd * Id * cos(),其中Idiffuse为漫反射光强,Kd为物体表面的漫反射性质,Id为光强,为光的入射角弧度。

当然,使用Three.js的Lambert材料可以直接使用,不需要知道上面的公式。

创建黄色兰伯特材质的方法是:

新的三个。mesh Lambert material({ color :0 xfff00 })在使用照明后会获得以下效果:

颜色用来表示材料对散射光的反射能力,也是设置材料颜色最常用的属性。此外,您还可以使用环境色和发射色来控制材料的颜色。

环境光表示对环境光的反射能力,仅当设置了环境光时才有效。材料对环境光的反射能力乘以环境光强度,以获得材料的实际颜色。

发射性是材料的自发光颜色,可以用来表示光源的颜色。它不是光源,而是一种不受光照影响的颜色。单独使用红色自发光:

new three . meshambert material({ missive :0 xff 0000 })的效果是:

如果同时使用红色自发光光和黄色散射光:

new three . meshlambertmaterial({ color : xfff00,missive:xff0000})的效果如下:

球体的效果:

总结朗伯材料的独特性能:

环境色:设置材质的环境色,与环境光源配合使用。该颜色将乘以环境光的颜色。也就是响应光源。

发射性:设置材料发射的颜色,它不是光源,而是不受光照影响的颜色。默认为黑色。

源代码:

!doctype HTML HTML Head Metacharset=' UTF-8 ' Title 3 . js Test 7.2/Title/Head Body Onload=' init()' Canvas ID=' Main Canvas ' Width=' 400 px ' Height=' 300 px '/Canvas/Body脚本类型=' text/JavaScript ' src=' http 3360 js/THREE . min . js '/脚本脚本脚本类型=' text/JavaScript ' function init(){ var renderer=new THREE。WebGLRenderer({ canvas : document . getelementbyid(' mainCanvas ')});renderer . SetClearColor(0x 000000);var场景=新三。场景();//相机var camera=new THREE。正投影摄像机(-5,5,3.75,-3.75,0.1,100);camera.position.set(25,25,25);相机。看(新的三。Vector3(0,0,0));scene.add(摄像机);//light var light=new THREE。PointLight(0xffffff,1,100);light.position.set(10,15,5);场景添加(光);var material=new THREE。MeshLambertMaterial({ color :0x ffff 00,emissiv e :0x ff 0000 });var cube=new THREE。网状(新三。立方体几何(5,5,5),材料;scene.add(立方体);//var sphere=new THREE。网状(新三。球面测量法(3,20,8),材料;//scene.add(球体);renderer.render(场景、摄像机);} /script/html3.phong材料

Phong材质(网格材质)是一种符合Phong照明模型的材质。与Lambert模型不同,Phong模型考虑了镜面反射的影响,因此特别适用于金属和镜面。

漫反射和朗伯照明的模型是一样的,镜面反射的模型是:

Ispecular=Ks * Is * (cos(alpha)) ^ n

其中,Ispregular为镜面光强度,Ks为材料表面的镜面反射系数,is为光源强度,为反射光与视线的夹角,n为高光指数,光斑越高,高光光斑越小。

由于漫反射部分与Lambert模型一致,如果只设置漫反射而不指定镜面反射系数,其效果与Lambert相同:

新的三。meshyphongmaterial({ color :0x ffff 00 });

同样,您可以指定发射值和环境值,这里不再描述。以下是通过镜面值指定镜面反射系数的描述。首先,我们只使用镜面反射,将高光设置为红色,并将其应用于球体:

var material=new THREE。meshyphongmaterial({镜象:0x ff 0000 });var sphere=new THREE。网状(新三。球面测量法(3,20,8),材料;效果是:

您可以通过shinines属性控制照明模型中的n值。当shinines值较大时,高光的光斑较小,默认值为30。当我们将其设置为1000时:

新的三。meshyphongmaterial({镜象:0xff0000,shinines 3360 1000 });效果是:

使用黄色镜面光和红色散射光:

材料=新的三。meshyphongmaterial({ color :0x ff 0000,镜象:0xffff00,shinines 3360 100 });总结Phong材料的独特性能:

环境色:设置材质的环境色,与环境光源配合使用。该颜色将乘以环境光的颜色。也就是响应光源。

发射性:设置材料发射的颜色,它不是光源,而是不受光照影响的颜色。默认为黑色

镜面反射:指定材质的亮度及其高光的颜色。如果将其设置为与颜色属性相同的颜色,将获得与金属更相似的另一种材质。如果设置为灰灰色,它将看起来像塑料

亮度:指定高光的亮度。默认值为30。

源代码:

!DOCTYPE html html head meta charset=' UTF-8 '标题3。射流研究…测试7.3/title/head body on load=' init()' canvas id=' mainCanvas ' width=' 400 px ' height=' 300 px '/canvas/body script type=' text/JavaScript ' src=' http : js/THREE。量滴js '/script type=' text/JavaScript '函数init(){ var renderer=new THREE .WebGLRenderer({ canvas :文档。getelementbyid(' mainCanvas ')});渲染器。SetClearColor(0x 000000);定义变量场景=新三。场景();//相机var相机=新三.正投影摄像机(-5,5,3.75,-3.75,0.1,100);摄像机位置设置(25,25,25);相机。看(新的三Vector3(0,0,0));scene.add(摄像机);//light var light=new THREE .PointLight(0xffffff,1,200);light.position.set(10,15,25);场景添加(光);可变材料=新的三.mesh Phong material({//镜象:0xff0000,color:0xff0000,镜象:0xffff00,shinines 3360 100 });//var cube=new THREE .网状(新三。立方体几何(5,5,5),材料;//场景。add(立方体);var sphere=new THREE .网状(新三。球面测量法(3,20,8),材料;scene.add(球体);renderer.render(场景、摄像机);}/脚本/html总结

本文的内容到这就结束了,文章通过详细实例及图片介绍了三。射流研究…中的琥珀与Phong,希望对大家的学习有所帮助,小编会陆续整理三。射流研究…的相关文章,对三。射流研究…感兴趣的朋友们请继续支持我们。

版权声明:三个js学习的兰博和Phong资料是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。