转载请保留此句:商域无疆 - 本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、html5、WEBGL、THREE.JS,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
俺也是刚开始学,好多地儿肯定不对还请见谅.
以下代码是THREE.JS 源码文件中Light/DirectionalLight.js文件的注释.
/**
* @author mrdoob / http://mrdoob.com/
* @author alteredq / http://alteredqualia.com/
*/
/*
///DirectionalLight方法根据设置灯光的颜属性color, 强度属性intensity创建平行光光源.
///DirectionalLight对象的功能函数采用定义构造的函数原型对象来实现.
/// NOTE: SpotLight类型灯光实现了阴影,但是需要在场景中使用MeshLambertMaterial或者MeshPhongMaterial
/// 下面一些注释直接摘抄自:http://www.cnblogs.com/yiyezhai/archive/2012/12/24/2829991.html
/// Example:
/// var light = new THREE.SpotLight(0xff0000,1,100,Math.PI /2,5); //创建灯光对象
/// light.position.set(50,50,30); //设置位置
/// light.castShadow = true; //开启阴影
/// light.shadowMapWidth = 1024; //阴影贴图宽度设置为1024像素
/// light.shadowMapHeight = 1024; //阴影贴图高度设置为1024像素
/// light.shadowCameraNear = 500; //阴影的平截头体区域near属性
/// light.shadowCameraFar = 4000; //阴影的平截头体区域far属性
/// light.shadowCameraFov = 30; //阴影的平截头体区域fov属性
/// scene.add(lignt); //加入场景
*/
///DirectionalLight
///灯光的颜色属性
///灯光的强度,默认是1
///返回DirectionalLight,平行光光源.
THREE.DirectionalLight = function ( color, intensity ) {
THREE.Light.call( this, color ); //调用Light对象的call方法,将原本属于Light的方法交给当前对象DirectionalLight来使用.
this.position.set( 0, 1, 0 ); //灯光的位置属性初始化为,0,1,0
this.target = new THREE.Object3D(); //创建一个目标点对象,目标点对象是一个Object3D对象.
this.intensity = ( intensity !== undefined ) ? intensity : 1; //灯光的颜色属性,如果不指定,初始化为1.(光线的密度,默认为1。因为RGB的三个值均在0~255之间,不能反映出光照的强度变化,光照越强,物体表面就更明亮。)
this.castShadow = false; //布尔值,默认为false,如果设置为true,对于所有表面都会逐像元地计算其在光照方向上是否被遮挡,这会消耗大量的计算。
this.onlyShadow = false; //布尔值,控制是否只产生阴影而不“照亮”物体,默认为false。这种模式也许有什么特殊应用吧。
//
this.shadowCameraNear = 50; //shadowCameraNear属性,正交投影立方体近端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,near默认是50
this.shadowCameraFar = 5000; //shadowCameraFar属性,正交投影立方体远端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,far默认是5000
this.shadowCameraLeft = - 500; //shadowCameraLeft属性,正交投影立方体左端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,left默认是500
this.shadowCameraRight = 500; //shadowCameraRight属性,正交投影立方体右端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,right默认是500
this.shadowCameraTop = 500; //shadowCameraTop属性,正交投影立方体上端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,top默认是500
this.shadowCameraBottom = - 500; //shadowCameraBottom属性,正交投影立方体下端,定义一个范围(正交投影立方体),不计算在范围之外的物体的阴影,Bottom默认是500
this.shadowCameraVisible = false; //shadowCameraVisible设置为true,会在场景中显示灯光的框架,方便调试
this.shadowBias = 0; //阴影贴图的偏移,
this.shadowDarkness = 0.5; //阴影对物体亮度的影响,默认是0.5
this.shadowMapWidth = 512; //阴影贴图宽度,单位像素,默认512
this.shadowMapHeight = 512; //阴影贴图高度,单位像素,默认512
/*对于平行光,WebGL可以使用级联阴影贴图(或成为平行分割阴影贴图)有很好的阴影质量,特别是远距离观看。
级联阴影通过分割可视区域逐步部分变大,并使用相同的大小,在每个阴影贴图。结果是物体接近观看者将比更远的物体获得更多的阴影贴图像素。
对于平行光阴影的质量和性能,阴影的距离是非常重要的。就像阴影级联数,阴影距离可以在质量设置中设置,很容易降低阴影范围,以减少硬件性能消耗。
在阴影距离结束处,阴影将淡出,更远的物体将没有阴影。大多数情况下在场景中更远地方的阴影不会引人注目!*/
this.shadowCascade = false; //阴影级联
this.shadowCascadeOffset = new THREE.Vector3( 0, 0, - 1000 ); //阴影级联偏移距离
this.shadowCascadeCount = 2; //当使用2个阴影级联时,整个阴影距离内,默认被分为两块,靠近观察者较小的块和远处较大的块
this.shadowCascadeBias = [ 0, 0, 0 ]; //阴影级联偏移数组
this.shadowCascadeWidth = [ 512, 512, 512 ]; //阴影级联宽度数组
this.shadowCascadeHeight = [ 512, 512, 512 ]; //阴影级联高度数组
this.shadowCascadeNearZ = [ - 1.000, 0.990, 0.998 ]; //阴影级联近处
this.shadowCascadeFarZ = [ 0.990, 0.998, 1.000 ]; //阴影级联远处
this.shadowCascadeArray = []; //阴影级联数组
//TODO: 下面这些完全没弄明白,以后补上详细的注释
this.shadowMap = null; //指定阴影贴图,WebGLRenderTarget对象,这里好像很复杂,完全没弄明白,以后补上详细的注释.
this.shadowMapSize = null; //阴影图的大小,注意,这里应符合OpenGL中对纹理的要求(2的n次方+2n)
this.shadowCamera = null; //阴影贴图相机,THREE.PerspectiveCamera对象,
this.shadowMatrix = null; //阴影贴图矩阵
};
/**************************************************************************************
****下面是DirectionalLight对象提供的功能函数定义,一部分通过prototype继承自Light方法
***************************************************************************************/
THREE.DirectionalLight.prototype = Object.create( THREE.Light.prototype ); //DirectionalLight对象从THREE.Light的原型继承所有属性方法
/*clone方法
///clone方法克隆DirectionalLight对象
*/
///clone
///返回克隆的DirectionalLight对象
THREE.DirectionalLight.prototype.clone = function () {
var light = new THREE.DirectionalLight();
THREE.Light.prototype.clone.call( this, light ); //调用THREE.Light.clone方法,克隆平行光对象
//复制当前灯光对象的属性
light.target = this.target.clone();
light.intensity = this.intensity;
light.castShadow = this.castShadow;
light.onlyShadow = this.onlyShadow;
//
light.shadowCameraNear = this.shadowCameraNear;
light.shadowCameraFar = this.shadowCameraFar;
light.shadowCameraLeft = this.shadowCameraLeft;
light.shadowCameraRight = this.shadowCameraRight;
light.shadowCameraTop = this.shadowCameraTop;
light.shadowCameraBottom = this.shadowCameraBottom;
light.shadowCameraVisible = this.shadowCameraVisible;
light.shadowBias = this.shadowBias;
light.shadowDarkness = this.shadowDarkness;
light.shadowMapWidth = this.shadowMapWidth;
light.shadowMapHeight = this.shadowMapHeight;
//
light.shadowCascade = this.shadowCascade;
light.shadowCascadeOffset.copy( this.shadowCascadeOffset );
light.shadowCascadeCount = this.shadowCascadeCount;
light.shadowCascadeBias = this.shadowCascadeBias.slice( 0 );
light.shadowCascadeWidth = this.shadowCascadeWidth.slice( 0 );
light.shadowCascadeHeight = this.shadowCascadeHeight.slice( 0 );
light.shadowCascadeNearZ = this.shadowCascadeNearZ.slice( 0 );
light.shadowCascadeFarZ = this.shadowCascadeFarZ.slice( 0 );
return light; //返回克隆的平行光的对象
};
相关推荐
Three.js全部教程,附带源码和obj、fbx等模型文件,所有代码每行均有注释,下载即可运行代码,不需安装其他
PPT内容包括: three.js作品展示 three.js简单介绍 three.js部分简单对象简介 three.js代码展示(含注释) three.js动画实现 PPT试用于大学生课堂展示,冲平时分!
算是全网代很全面的代码了,因为内外的网上资源少的可怜,代码功能包括全景图引入,全景图的前进后退功能。后续会做模态框类似的功能。其中代码注释比较全面,阅读起来不会有太大压力
three.js示例 使用three.js 实现的旋转立方体 代码注释完善
图形库“Three.js using WebGL”: ://threejs.org/ 来自three.js的代码示例: : Three.js 食谱章节:1、3、10 TrackballControls 库,允许与鼠标交互。 图像资产 所有图片资源均来自无版权站点: : 注释 为...
开发日志: First off 请参阅app.js中的注释以获取代码说明。 在此博客中,我列出了我遇到的问题: Window resize 在我们可以看到THREEx.WindowResize.js代码的NPM版本。 也可以使用一些自定义代码来完成,请参阅app...
我试图在javascript代码注释(位于js/procedural.city.generator.js中)中包含尽可能多的详细信息。Perlin噪声实现的全部功劳归于Stefan Gustavson(stegu@itn.liu.se),Peter Eastman和Joseph Gentle。
TC:ThreeCannon /!\项目已终止/!\ 3大改进 TC.BodyObject3D既是主体又是object3d,无需在每个帧上更新网格位置/四元数!...如果不使用THREE.Object3d的属性旋转,则代码将保持有效 删除您的机制以从CANNON.B
这是一个基于THREE.js和Cannon.js的WebGL游戏的免费开源JavaScript微框架。 Platforms游戏的代码已开源,以使THREE.BasicThirdPersonGame的游戏开发人员和用户可以了解最终游戏项目的外观。 因此,游戏本身没有...
关于DirectX3D 9中粒子系统之烟雾的实现,代码很规范,内有详细注释,可供大家学习和借鉴
threejs-modern-app 全屏Three.js应用程序的样板和工具 资产归功于和 它的灵感来自于的 ,但是使用ES6语法而不是node进行了重写和简化,使其更易于阅读和注释,因此可以轻松地对其进行自定义以满足您的需求。 ...
threejs太阳能系统实验 我们的太阳系是在Three.js中作为实验构建的。 行星大致成比例,轨道速度也大致成比例。 但是,行星之间的距离被大大缩小了(大约是行星之间实际距离的1/4)。 天然气巨头之间的规模距离并没有...
库房建模示例 技术交流群:1018373095 使用three.js进行库房建模,...直接下载运行即可,具体内容请看代码,都有详细注释,不明白的可以提issues。 开源不易,且行且珍惜,您的star:sparkles:是我继续完善的动力,谢谢!
Three.js基础 这是。 这项工作正在进行中。 随时贡献,尤其是本地化 贡献 当然,总是欢迎漏洞修复。 如果您想写一篇新文章,请尝试一次始终执行一个步骤。 不要一步一步做两件事或更多事情。 用最简单的术语解释...
我的三个Js旅程 该存储库包含课程“中的所有代码和我的所有注释 笔记之间有一个主页,但是如果您想浏览代码,则每个文件夹和课程都是独立的,以便能够分别进行播放和试验,每个项目都会有一个生产模式
photo-sphere-viewer,实现球形滚动查看图片,代码比较简单,没写注释,主要看demo跑一次应该就会了,网上资源太少,气死我了,都是复制粘贴,只能自己写一个demo
特征静态文件BEM风格的Sass(带有嵌入式Critical CSS) 香草JS(ES6 / Babel) 系统字体带有服务人员的脱机支持Webmention.io支持通过AWS Lambda Function在Twitter上自动发布注释专注于速度和可及性执照这是我的...
先看看效果吧,如下图(录制gif软件有点渣,看起来卡卡的…...网上摘了一份canves实现的代码,略微去掉了些重复定义的样式并且给出js注释,代码如下 html代码 <a>Press me! css代码 * { box-sizing: border-box; outl
同时,我们的代码结构清晰、注释详细,便于您学习和掌握HTML、CSS和JavaScript等前端技术。无论您是面临课程设计、毕业设计等学术挑战,还是希望在职业发展中展示自己的才华和技能,这套源代码文件都将成为您的得力...