注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿当的博客

世界是个游乐场

 
 
 

日志

 
 

threejs学习笔记(2)  

2013-10-09 13:12:00|  分类: js,html5,webgl,t |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

threejs学习笔记(2) - 阿当 - 阿当的博客


demo地址:http://www.adanghome.com/js_demo/32/


今天练习的主题是光源。


1)从官方文档上来看,光源的总类有Light、AmbientLight、AreaLight、DirectionalLight、HemisphereLight、PointLight、SpotLight这几种;


2)light和mesh相比,有相似的地方,都是通过scene.add添加进来的,但也有区别。mesh在任何时候都可以被add进来和remove出去。但light比较奇怪,在init render之前添加进来的light,可以被正常显示,但如果已经init render之后,被动态添加进来则不会产生任何效果。查了一圈之后,在github上查到了作者的回答,如下:https://github.com/mrdoob/three.js/issues/598


原来是因为材质的渲染成本相当高,所以作者希望让开发者自己决定“在什么时候重新渲染材质”,所以作者留了个material.needsUpdate = true; 让开发者手动添加这段代码,而不是让threejs自动重渲染材质。我在demo里就是添加了这段代码,才可以动态添加光源的。


另外,在remove光源时,可以不用手动再添加这段代码了,只在add时添加及可;


3)光源可以叠加,可以同时开启几个光源;


4) 如果不加任何光源,则mesh会显示成黑色,不管原来物体本身的颜色如何;


5)如果只添加ambientLight,则mesh颜色完全随ambientLight的颜色,不管原来物体本身的颜色如何。


ambientLight很简单,只有一个参数,即环境光的颜色。


6) 如果只添加pointLight,则mesh颜色会混合光源颜色和mesh本身颜色;


7)areaLight是镜面光,以一个平面向某个角度射出光线。接收两个参数:颜色和光线强度。强度的范围是从0~1的浮点数。另外,还要调整镜面的坐标、长宽和旋转角度。可惜的是我调试了半天也没调好参数,一直没办法让光线照到我的物体上,看不出有什么效果 T_T。这个留着以后todo吧。


8)directionalLight是平行光,一般用于模拟太阳光线这种“很远的地方投射过来的光源”。接收两个参数:颜色和强度。它需要设置一下position,从(0,0,0)到这个position的向量即是平行光的方向。


9)hemisphereLight是半球光,接收三个参数:顶部颜色、底部颜色和光线强度。目前还不知道半球光用在什么场合的。


10) pointLight是点光源,接收三个参数:颜色、强度和距离。


11)spotLight是聚光灯。接收五个参数:颜色、强度、距离、角度和说明。官方的例子只使用到了颜色这个参数,不清楚其它几个,特别是角度和说明这两个参数的作用。另外,官方的例子还用到了spotLight.castShadow = true; spotLight.shadowMapWidth = 1024; spotLight.shadowMapHeight = 1024; spotLight.shadowCameraNear = 500; spotLight.shadowCameraFar = 4000; spotLight.shadowCameraFov = 30;等参数,也不清楚具体的作用是什么,至少在我的demo里没看出效果。


不少东西还没摸清,缺实践,回头再研究吧。



  评论这张
 
阅读(5)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017