【three.js第五课】光线的添加和感光材料
材料分类:
MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料。
MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表面
MeshPhongMaterial:网孔材料,用于表面有光泽的材料,计算每个像素。
光线分类
注意:材料收到光线影响,即不同的材料对不同的光线表现出不同的特点,试着该表材料和光线,观测结果
1. AmbientLight 环境光:这种光的颜色被应用到全局范围内的所有对象。
2. PointLight 点光源 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象
3. 平行光源(DirectionalLight).影响使用 兰伯特网孔材料(MeshLambertMaterial) 或 Phong网孔材料(MeshPhongMaterial) 的对象。
4. 聚光光源(SpotLight)一种能投射锥形阴影区域的点光源。 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象。
5. 光(Light)光源的基类。
1.在【three.js第四课】的原本基础上进行修改,将自定义的材料修改为如下:
- //自定义材料
- //map:用于设置纹理贴图,也可以用16进制的颜色替换:color:0xFFFFFF
- //side:用于设置显示面。属性可设置为双面DoubleSide,前面FontSide,后面BackSide
- //MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料。
- //MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表面
- //MeshPhongMaterial:网孔材料,用于表面有光泽的材料,计算每个像素。
- var cubeMaterial = [
- //右
- new THREE.MeshLambertMaterial({color:0xFFFFFF,side:THREE.DoubleSide}),
- //左
- new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/2.png') ,side:THREE.DoubleSide}),
- //上
- new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/3.png') ,side:THREE.DoubleSide}),
- //下
- new THREE.MeshLambertMaterial({map: new THREE.TextureLoader().load('images/4.png') ,side:THREE.DoubleSide}),
- //前
- new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/5.png') ,side:THREE.DoubleSide}),
- //后
- new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/6.png') ,side:THREE.DoubleSide})
- ];
2.在此处举例上面所有的光线,更换时将保留一个,其他光线注释即可,光线使用如下:
- //添加光线
- //注意:材料收到光线影响,即不同的材料对不同的光线表现出不同的特点,试着该表材料和光线,观测结果
- //1. AmbientLight 环境光:这种光的颜色被应用到全局范围内的所有对象。
- //AmbientLight(光线的颜色,光线的强度)
- //var ambientLight = new THREE.AmbientLight(0xFFFFFF,3.0);
- //scene.add(ambientLight);//光线加入场景中
- //2. PointLight 点光源 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象
- //var pointLight = new THREE.PointLight(0xFFFFFF,3.0);
- //scene.add(pointLight);//光线加入场景中
- //3. 平行光源(DirectionalLight).影响使用 兰伯特网孔材料(MeshLambertMaterial) 或 Phong网孔材料(MeshPhongMaterial) 的对象。
- //var directionalLight = new THREE.DirectionalLight(0xFFFFFF,3.0);
- //scene.add(directionalLight);//光线加入场景中
- //4. 聚光光源(SpotLight)一种能投射锥形阴影区域的点光源。 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象。
- //var spotLight = new THREE.SpotLight(0xFFFFFF,3.0);
- //scene.add(spotLight);//光线加入场景中
- //5. 光(Light)光源的基类。
- var light = new THREE.Light(0xFFFFFF,3.0);
- scene.add(light);//光线加入场景中
4.修改不同的光线以及材料,观察不同光线对材料的影响。
5.源码:
- <!DOCTYPE html>
- <html>
- <head>
- <title>demo1</title>
- </head>
- <style type="text/css">
- body{
- margin:;
- }
- canvas{
- width:%;
- height:%;
- }
- </style>
- <body>
- <script src="jquery.min.js"></script>
- <script src="../build/three.js"></script>
- <script src="../examples/js/controls/OrbitControls.js"></script>
- <script type="text/javascript">
- var scene = new THREE.Scene();//创建场景
- //创建一个摄像机对象
- var camera = new THREE.PerspectiveCamera(,window.innerWidth / window.innerHeight, 0.1, );
- //创建渲染器
- var renderer = new THREE.WebGLRenderer();
- renderer.setSize(window.innerWidth, window.innerHeight);
- document.body.appendChild(renderer.domElement);//渲染到浏览器
- //加入事件监听器,窗口自适应
- window.addEventListener('resize', function(){
- var width = window.innerWidth;
- var height = window.innerHeight;
- renderer.setSize(width,height);
- camera.aspect = width/height;
- camera.updateProjectionMatrix();
- })
- //轨道控制 镜头的移动
- var controls = new THREE.OrbitControls(camera,renderer.document);
- //创建形状 BoxGeometry
- var geometry = new THREE.BoxGeometry(,,);
- //自定义材料
- //map:用于设置纹理贴图,也可以用16进制的颜色替换:color:0xFFFFFF
- //side:用于设置显示面。属性可设置为双面DoubleSide,前面FontSide,后面BackSide
- //MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料。
- //MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表面
- //MeshPhongMaterial:网孔材料,用于表面有光泽的材料,计算每个像素。
- var cubeMaterial = [
- //右
- new THREE.MeshLambertMaterial({color:0xFFFFFF,side:THREE.DoubleSide}),
- //左
- new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/2.png') ,side:THREE.DoubleSide}),
- //上
- new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/3.png') ,side:THREE.DoubleSide}),
- //下
- new THREE.MeshLambertMaterial({map: new THREE.TextureLoader().load('images/4.png') ,side:THREE.DoubleSide}),
- //前
- new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/5.png') ,side:THREE.DoubleSide}),
- //后
- new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/6.png') ,side:THREE.DoubleSide})
- ];
- //创建材料 wireframe是否使用线条
- //var material = new THREE.MeshBasicMaterial({color:0xFFFFFF,wireframe:true});
- var material = new THREE.MeshFaceMaterial(cubeMaterial);
- //将材料和形状结合
- var cube = new THREE.Mesh(geometry,material);
- //物体加入场景中
- scene.add(cube);
- //添加光线
- //注意:材料收到光线影响,即不同的材料对不同的光线表现出不同的特点,试着该表材料和光线,观测结果
- //1. AmbientLight 环境光:这种光的颜色被应用到全局范围内的所有对象。
- //AmbientLight(光线的颜色,光线的强度)
- //var ambientLight = new THREE.AmbientLight(0xFFFFFF,3.0);
- //scene.add(ambientLight);//光线加入场景中
- //2. PointLight 点光源 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象
- //var pointLight = new THREE.PointLight(0xFFFFFF,3.0);
- //scene.add(pointLight);//光线加入场景中
- //3. 平行光源(DirectionalLight).影响使用 兰伯特网孔材料(MeshLambertMaterial) 或 Phong网孔材料(MeshPhongMaterial) 的对象。
- //var directionalLight = new THREE.DirectionalLight(0xFFFFFF,3.0);
- //scene.add(directionalLight);//光线加入场景中
- //4. 聚光光源(SpotLight)一种能投射锥形阴影区域的点光源。 使用 MeshLambertMaterial 或 Phong网孔材料(MeshPhongMaterial) 来影响对象。
- //var spotLight = new THREE.SpotLight(0xFFFFFF,3.0);
- //scene.add(spotLight);//光线加入场景中
- //5. 光(Light)光源的基类。
- var light = new THREE.Light(0xFFFFFF,3.0);
- scene.add(light);//光线加入场景中
- camera.position.z=;//设置相机的位置
- //逻辑
- var update=function(){
- //物体随着XY轴旋转
- //cube.rotation.x +=0.01;
- //cube.rotation.y += 0.005;
- }
- //绘画渲染
- var render=function() {
- renderer.render(scene,camera);
- }
- //循环运行update,render
- var loop=function() {
- requestAnimationFrame(loop);
- update();
- render();
- }
- loop();//循环开始
- </script>
- </body>
- </html>
【three.js第五课】光线的添加和感光材料的更多相关文章
- vue.js 第五课
计算属性 1.基础例子 2.计算属性 vs $watch 3.计算 setter 4.计算属性开发实务demo 1.计算属性 computed( 电脑computer) (区别普通属性) 计算属性 ...
- 潭州课堂25班:Ph201805201 WEB 之 JS 第五课 (课堂笔记)
算数运算符 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 【three.js第六课】物体3D化
1.在[three.js第五课]的基础上引入AnaglyphEffect.js文件. 文件路径: three源码包中进入[examples]文件夹: 进入[js]文件夹: 进入[effects]文件夹 ...
- IC入门课第五课作业:完善 Microblog 前端(1、显示发布者的名字;2、增加新UI、3、关注其他学员的 canister)
上周完成了 IC 入门课程第五课的作业 现将答案贴出,欢迎同学们参考,禁止抄袭作业哦 课程作业 (完善 microblog 前端) 1. 显示消息的发布者名字 a. 给 Message 增加 auth ...
- NeHe OpenGL教程 第二十五课:变形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十五课:纹理图形字
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第五课:3D空间
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 .第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的吗 ...
- .NET高级代码审计(第五课) .NET Remoting反序列化漏洞
0x00 前言 最近几天国外安全研究员Soroush Dalili (@irsdl)公布了.NET Remoting应用程序可能存在反序列化安全风险,当服务端使用HTTP信道中的SoapServerF ...
随机推荐
- 李宏毅老师机器学习课程笔记_ML Lecture 1: 回归案例研究
引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...
- SpringCloud服务的注册发现--------Eureka实现高可用
1,Eureka作为注册中心,掌管者服务治理的功能,十分重要,如果注册中心的服务一旦宕机,所有的服务就会挂了,为此,实现注册中心的集群(高可用)就显得十分必要了 2,Eureka 搭建集群 实现原理就 ...
- 微信阻止ios下拉回弹,橡皮筋效果
直接阻止touchmove事件就好了(需设置passive: false): document.addEventListener("touchmove", function(evt ...
- Pytest系列(5) - 用例执行的几种状态
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 用例执行状态 用例执行完成后,每条 ...
- 【每周小项目】使用 puppeteer 插件爬取动态网站
目录 0. 前言 问题 解决 1. 下载与引包 2. 使用步骤 3. 爬过的几个坑 page.evaluate 的传参问题 元素操作问题 0. 前言 这两天对爬虫开始感兴趣,最开始是源于天涯的一个房价 ...
- C/C++知识总结 四 循环与分支语句
C/C++循环与分支语句 循环与分支语句的意义 关系运算符.逻辑运算符 for循环和嵌套for循环(基于范围for循环) while循环与do while循环 分支if语句.if else语句.if ...
- centos默认终端bash美化、颜色设置
centos默认终端bash是一个很简单的界面,又无法通过像zsh一样直接安装主题和代码高亮插件,但是我们可以在bashrc的配置文件中通过代码实现一部分功能: 1.代码介绍: 这里推荐一篇大佬的文章 ...
- Xshell连接Centos7
13:53:10 2019-08-05 一个月暑假开始 学习搭建一个自己的博客 我是用阿里云的服务器搭建自己的博客 先利用XShell连接我的服务器 XShell下载地址:https://www.ne ...
- TC1.6SourceCode java课程表
/** * @version 2.0 * @author sharks */ /** * Instruction * this version will use IO * apply file to ...
- MyBatis(八):高级结果映射
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...