练习three.jsdemo的详细注释

<!DOCTYPE html >
< html >
< head lang= "en" >
< meta charset= "UTF-8" >
< title > 3dmodel的load </ title >
< script src= "./thresJS/chapter7A/js/three.js" ></ script >
<!-- 引入控制 器 简单说用鼠标控制模型进行旋转移动-->
< script src= "./thresJS/chapter7A/js/controls/TrackballControls.js" ></ script >
<!--模型加载器,将vtk格式的3d文件转化为js可解析的文件-->
< script src= "./thresJS/chapter7A/js/loaders/VTKLoader.js" ></ script >
<!--兼容检测插件(1)判断canvas兼容。(2)判断webgl兼容性。(3)在页面添加不兼容提示信息。-->
< script src= "./thresJS/chapter7A/js/Detector.js" ></ script >
<!--插件:性能检测器-->
< script src= "./thresJS/chapter7A/js/Stats.js" ></ script >
< style >
body {
font-family : Monospace ;
background-color : #000 ;
color : #fff ;
margin : 0 ;
overflow : hidden ;
}
#info {
color : #fff ;
position : absolute ;
top : 10 px ;
width : 100 %;
text-align : center ;
z-index : 100 ;
display : block ;
}
#info a , . button { color : #f00 ; font-weight : bold ; text-decoration : underline ; cursor : pointer }
</ style >
</ head >
< body >
< div id= "info" ></ div >
< script >
if (! Detector . webgl ) Detector . addGetWebGLMessage () /*判断webgl兼容性,并添加不兼容提示信息*/
var container , stats , control , camera , renderer , scene , cross ;
init ();
animate ();
function init (){
/*透视相机的参数第一个代表着相机的张开的视角,类似于你自己眼睛睁开的大小,第二个就是相片(也就是成像)的宽高比例 剩下的两个参数分别是照相机到视景体最近、最远的距离,均为正值,且far应大于near*/
camera = new THREE . PerspectiveCamera ( 60 , window . innerWidth / window . innerHeight , 0.01 , 1e10 );
/*定位相机的位置,下面代表相机的位置是(0,0,0.2)*/
camera . position . z = 0.2 ;
/*实例化控制器*/
control = new THREE . TrackballControls ( camera );
/*按住鼠标左键旋转模型的速度*/
control . rotateSpeed = 5.0 ;
/*鼠标滚轮,放大或缩小模型的速度*/
control . zoomSpeed = 5 ;
/*鼠标右键平移模型的速度*/
control . panSpeed = 2 ;
/*禁用鼠标的滚轮滚动,缩小放大模型的功能*/
control . noZoom = false ;
/*禁用鼠标右键平移的功能*/
control . noPan = false ;
/*控制模型的惯性 ,true是没有惯性,不确定,待实验*/
control . staticMoving = false ;
/*动态阻尼系数,取值范围实在0-1之间就是灵敏度,值越小,就越灵敏,对左键共的功能的影响,值越大,使用左键旋转的时候,模型就会像震动一样,幅度和你移动鼠标的距离有关,但值过大的时候。如0.7点到左键模型就会疯狂旋转,
* 对右键的影响,值越大,平移的速度和距离就会变短
*对滚轮的影响的是,值越大滚轮滚动后,放大和缩小的速率就会变慢
* */
control . dynamicDampingFactor = 0.3 ;
/*实例化场景*/
scene = new THREE . Scene ();
/*将相机对象放入到场景中去*/
scene . add ( camera );

/*方向光可以看成是平行光*/
var dirLight = new THREE . DirectionalLight ( 0xfffffff );
dirLight . position . set ( 200 , 200 , 1000 ). normalize ();


/*下面这行代码是将光源放进相机的镜头中,这样随着镜头的移动那你看模型的所有部分,否则当你将光源利用scene.add()放进场景中之后,你旋转模型之后会发现,模型的背后就是黑色的*/
camera . add ( dirLight );
/*未发现这句代码的用处,因为删除之后没有影响*/
camera . add ( dirLight . target );

/*兰伯特网孔材料*/
var material = new THREE . MeshLambertMaterial ({ color : 0xffffff , side : THREE . DoubleSide });
/*加载3d模型*/
var load = new THREE . VTKLoader ();
load . addEventListener ( 'load' , function (event){
var geometry =event. content ;
var mesh = new THREE . Mesh ( geometry , material );
mesh . position . setY (- 0.09 );
scene . add ( mesh )
});
load . load ( "bunny.vtk" );

/*生成渲染器对象,antialias属性是布尔值;代表是否要锯齿效果*/
renderer = new THREE . WebGLRenderer ({ antialias : false });
/*设置清楚渲染器颜色和透明度,但是在官方文档中发现,方法应该是setClearColor,下面的应该是老版本的*/
renderer . setClearColor ( 0x000000 , 1 );
/*设置渲染器的宽高,与画布一样大小*/
renderer . setSize ( window . innerWidth , window . innerHeight );
/*建立dom节点,将渲染加入该节点,用以渲染canvas,*/
container = document . createElement ( 'div' );
document . body . appendChild ( container );
container . appendChild ( renderer . domElement );
/*性能检测插件的对象生成*/
stats = new Stats ();
stats . domElement . style . position = 'absolute' ;
stats . domElement . style . top = "0px" ;


container . appendChild ( stats . domElement );
/*监听windows窗口的大小变化*/
window . addEventListener ( "resize" , onWindowResize , false )
}
function onWindowResize (){
camera . aspect = window . innerWidth / window . innerHeight ;
/*更新相机投影矩阵,必须在参数发生变化后调用。*/
camera . updateProjectionMatrix ();

renderer . setSize ( window . innerWidth , window . innerHeight );
/*用在窗口大小变换时候执行,目前未发现其作用 */
control . handleResize ()
}
function animate (){
/*游戏循环的实现*/
requestAnimationFrame ( animate );
control . update ();
renderer . render ( scene , camera );
stats . update ();
}

</ script >
</ body >
</ html >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值