优先更新个人博客,求关注~~
个人博客:https://jinglecjy.github.io/

加载器Loaders

加载器是threejs中很重要的一个步骤,可以用于加载纹理/图片/模型/音频等资源,不同的loader对应不同格式的文件,loaders通用流程如下:

var loader = new THREE.[Loader]();
/* * 函数名:.load(url, onLoad, onProgress, onError)* url:资源地址* onLoad: 加载完成的回调,参数是已加载的资源文本* onProgress: 加载中的调用,参数是XmlHttpRequest实例* onError:加载出错时调用
*/
loader.load(url, onLoad, onProgress, onError)

1. TextureLoader/ImageLoader

加载图片资源,可以作为贴图(map)覆盖在物体上或者直接绘制在canvas上。

var loader = new THREE.TextureLoader();
loader.load('texture/earth.jpg', function( texture ) {// 作为纹理,或直接使用TextureLoader// var geometry = new THREE.SphereGeometry(15, 10, 10);// var meterial = new THREE.MeshBasicMaterial({color: 0x739783, map:texture});// earth = new THREE.Mesh(geometry, material);// scene.add(earth);// 直接绘制在canvas上var canvas =document.createElement('canvas');var context = canvas.getContext('2d');context.drawImage(texture, 100, 100);
})

2. AudioLoader

加载音乐也是常见的需求,加载音乐并播放的实现方法如下:

// 初始化侦听器并添加到相机中
var listener = new THREE.AudioListener();
camera.add(listener);
// 实例化一个音频对象并添加到场景中
var audio = new THREE.audio( audioListener );
scene.add(audio);
// 加载资源
var loader = new THREE.AudioLoader();
loader.load( 'audio/amobient.ogg', function(audioBuffer) {audio.setBuffer(audioBuffer);audio.play();
},
function(xhr) {console.log( (xhr.loaded / xhr.total * 100) + "% is loaded" );
},
function(xhr) {console.log('An error happened');
})

音频可以做到与场景相关,比如说做出3D音效,或者是让音乐可视化。在这里暂时不讨论,在之后使用到的时候再进行具体研究。

3. JSONLoader

实际项目中的物体可能十分复杂,不可以简单地用几何体实现,3D模型导出的JSON文件即可以存放物体的模型,也可以存放其材质和动画信息。解析一个 JSON 结构的数据并返回一个 object ,包含解析后的 geometry 和 materials。

var loader = new THREE.JSONLoader();
loader.load('./monster/monster.js',function (geometry, materials) {var material = new THREE.MultiMaterial(materials);var object = new THREE.Mesh(geometry, material);scene.add(object);}
)

注意

  • 使用加载的资源时,要适时重新渲染,否则无法生效。
  • 存在跨域问题。

贴图详解

大部分贴图都是通过材质(Meterial)中的属性来应用到模型上,不同材质支持的贴图不同,需要具体问题具体分析,以下列出目前使用过的贴图介绍。

1. 凹凸贴图(Bump Map)

用于给模型增加立体感,实际上并没有改变模型的形状,而是通过模型表面的阴影来达到凹凸的效果,使用方法如下:

var meterial = new THREE.MeshPhongMaterial({bumpMap: textureLoader.load('./img_bump.jpg')
})

2. 漫反射贴图(Diffuse Map)

用于表现物体表面的反射和表面颜色,即表现出物体被光照射到而显现的颜色和强度。漫反射贴图可以反映出物体的固有色及纹理,还有贴图上的光影。对于由几个模型拼接成的模型来说,光影是不必要的,因为通过打光就可以实现光影效果了,比如由许多砖模型拼凑成的一道墙。而对于一个整体,比如说一道墙的模型,砖块是由贴图实现的,那么在砖缝上绘制投影就很有必要了。

3. 高光贴图(Specular Map)

用来表现当光线照到模型表面时其表面属性,不同材质反射光的强度不同。越偏向RGB(0,0,0)的部分高光越弱,越偏向RGB(255,255,255)的部分高光越强。高光贴图需要与凹凸贴图和漫反射贴图配合使用,展现的材质才会趋近于真实世界。

var meterial = new THREE.MeshPhongMaterial({specular: 0x404040, // 高光颜色shininess: 5,              // 高光平滑度,默认30,值越高越强烈specularMap: textureLoader.load('./img_spec.jpg')
})

4. 环境贴图(Cube Map)

通过一个虚拟的立方体包围住物体,通过上下左右前后6张图来模拟真实环境,threejs将这些图片渲染成无缝环境盒子。

// 立方体环境,顺序是前后上下右左
var cubeTexture = new THREE.CubeTextureLoader().setPath('../img/skyBox').load({'px.jpg', 'nx.jpg','py.jpg', 'ny.jpg','pz.jpg', 'nz.jpg'
})
scene.background = cubeTexture;

光源Lights

为了让图片看起来更加立体真实,通常需要增加一些光线。
**注意:**只有部分的材质会受到光照的影响,比如MeshPhongMaterial、MeshLambertMaterial等,如MeshBasicMaterial是不会受到光照影响的。

1. 环境光(AmbientLight)

这种光应用到全局范围内的所有对象,可用于提高全局亮度,弱化阴影,给全局添加一个基调色。

var light = new THREE.AmbientLight(color, instensity); // 创建一个给定颜色和强度的环境光
scene.add(light);

2. 平行光(DirectionalLight)

产生平行的光线,当材质为MeshLambertMaterialMeshPhongMaterial时才会受到影响。

var light = new THREE.DirectionalLight(hex, instensity)

3. 点光源(PointLight)

/*
* hex:颜色的RGB值,如0x333333
* intensity:光强,optional
* distance:光照为0处到光源的距离,0表示到无穷远处为0,默认值,optional
* decay:沿着光照距离的衰退量,为2时实现现实世界的光衰减,缺省为1,optional
*/
var light = new THREE.PointLight(hex, intensity, distance, decay)

PointLight和DirectionalLight常用属性

常用属性 默认值 说明
target - 阴影相机定位的目标,必须为THREE.Object3D对象(如THREE.Mesh)
penumbra 0.0 聚光锥的半影衰减百分比[0, 1]
shadow - 用于存储光照阴影的所有信息,具体属性可参考光照阴影
castShadow false 是否投射动态阴影,很耗费计算资源

threejs基础下:贴图资源加载与光照相关推荐

  1. Cocos Creator2.4.8 资源加载源码阅读

    最近用到资源加载的问题:加载的资源进度条倒退问题,现在只是用临时的解决方案 - 加载进度如果出现会倒退的问题还是用原来的数值.抽时间看了下cocos creator 资源加载的源码,整理了一下脑图 一 ...

  2. 关于UE4动态资源加载(蓝图类)

    本帖纯属个人原创,如有转载请注明出处 需要注意的几点: 1.调试环境下进行的资源加载方式到打包出来后不一定能够使用. 2.假如遇到调试模式下程序运行正常,但是打包出来后程序crash,可以查看log: ...

  3. Threejs系列--18游戏开发--沙漠赛车游戏【loading资源加载进度条】

    Threejs系列--18游戏开发--沙漠赛车游戏[loading资源加载进度条] 序言 目录结构 代码一览 AreaFloorBorderBufferGeometry.js代码 AreaFloorB ...

  4. LayaAir基础(5) 之 图集打包及资源加载

    图集打包 例如: 第一种.利用ide提供的工具打包图集: 1.将资源拷贝到项目的laya/assets/role/role目录下 2.ide菜单栏中的工具 ---图集打包  设置相关的参数 3.点击确 ...

  5. 06.Spring 资源加载 - ResourceLoader

    基本概念 ResourceLoader 接口,在 Spring 中用于加载资源,通过它可以获取一个 Resouce 对象. 内部构造 首先来看它的接口定义: public interface Reso ...

  6. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  7. 前端性能优化学习 08 资源加载优化

    图片延迟加载 什么是延迟加载 首先来想象一个场景,当浏览一个内容丰富的网站时,比如电商的商品列表页.主流视频网站的节目列表等,由于屏幕尺寸的限制,每次只能查看到视窗中的那部分内容,而要浏览完页面所包含 ...

  8. 美团金融扫码付静态资源加载优化实践

    原文链接:https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651747208&idx=1&sn=b9fc54300 ...

  9. Unity资源加载入门

    写在前面 本文转载自:https://gameinstitute.qq.com/community/detail/123460,供自己学习用,如有疑问,请移步原创. 引言 Unity的资源加载及管理, ...

最新文章

  1. C++语言map和unordered_map的下标操作
  2. 【Python】Python语言学习:pip工具使用知识,模型保存pickle,PDF与docx相互转换处理...
  3. 使用Hyperopt实现机器学习自动调参
  4. Java 中的异常和处理详解
  5. python打开setting_Django自带日志 settings.py文件配置方法
  6. BZOJ 2597 剪刀石头布(最小费用最大流)(WC2007)
  7. JAVA面试考点解析(12) -- 算法
  8. 金古桥机器人_泽塔奥特曼上演“吃瘪预定”,金古桥强势回顾,阿尔法被骑着打脸...
  9. 编写android驱动程序,Android 驱动编写LED-NDK程序
  10. 甲骨文员工谈被裁原因;《绝地求生》停机维护;谷歌正研发折叠屏样机 | 极客头条...
  11. 利用百度OCR实现验证码自动识别
  12. 2021年认证杯SPSSPRO杯数学建模B题(第一阶段)依巴谷星表中的毕星团求解全过程文档及程序
  13. max30102c语言,max30102问题
  14. mbedtls学习3.mbedtls_API分析
  15. paper report: DIRT-T
  16. matplotlib设置x轴和y轴 设置
  17. 对计算机硬性环境,温度、湿度、灰尘环境对电脑的影响
  18. position之relative
  19. PHP 项目 该网页无法正常运作情况,但没有报错
  20. Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge

热门文章

  1. Java、JSP物流车辆调度系统
  2. Windows Server 2012 家用优化
  3. mysql使用结巴语句_结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍
  4. Android 连接USB设备(主机模式)
  5. nvenc vs x264 对比(1)
  6. Hikari连接池——java.lang.Exception: Apparent connection leak detected
  7. 揭秘信用卡职业养卡人:月赚两万如何办到
  8. Oracle数据库常用语句使用记录
  9. 【实战】轻轻松松使用StyleGAN(一):创建令人惊讶的黄种人脸和专属于自己的老婆动漫头像
  10. 海盗分金-动态规划实现