three.js需要场景(Scene)、相机(Renderer)、渲染器(Renderer)。 创建渲染器--- var renderer=new THREE.WebGLRenderer({ canvas:document.getElementById('mycanvas'); }); renderer.render(scene,camera);//开始渲染 如果用js生成canvas元素---- var renderer=new THREE.WebGLRenderer(); renderer.setSize(w,h);//设置canvas大小 renderer.setClearColor(0x000000);//设置canvas背景色 document.getElementsByTagName('body').appendChild(renderer.domElement); 创建场景--- var scene=new THREE.Scene(); 创建照相机--- //参数分别为视角 长宽比,近处裁面距离,远处裁面距离 var camera=new THREE.PerspectiveCamera(45,4/3,1,100); camera.position.set(0,0,5);//设置相机位置 scene.add(camera); 相机分两种: 正交投影相机---Three.OrthographicCamera(left,right,top,bottom,near,far) //可视角度,实际窗口的纵横比,近处的裁面的距离,远处裁面的距离 透视投影照相机---THREE,PerspectiveCamera(fov,aspect,near,far) 创建物体--- 长方体--- var cube=new THREE.Mesh(new THREE.CubeGeometry(1,2,3),new THREE.MeshBasicMaterial({ color:0xff0000 })); scene.add(cube);//添加长方体到荧幕中 其中CubeGeometry(立方体)参数为x,y,z,x方向的分段数,y方向的分段数,z方向的分段数 其中MeshBasicMaterial(基础网格材质) wireframe=true将材质渲染成线框 平面--- //x,y,x分段数,y分段数 THREE.PlaneGeometry(width,height,widthsegments,heightSegments) //圆形或者扇形 参数半径,经度上的分段数,纬度上的分段数,纬度上的分段数,纬度开始的弧度,纬度跨过的弧度 THREE.CircleGeometry(r,segments,thetaStart,thetaLength) 球体--- //参数分别为半径,经度上分段数,纬度上分段数,经度开始的弧度,经度跨过的弧度,纬度开始的弧度,纬度跨过的弧度 THREE.SphereGeometry(r,segmentsWidth,segmentsHeight,phiStart,PhiLength,thetaStart,thetaLength) 圆柱体--- THREE.CylinderGeometry(顶面半径,底面的半径,圆柱体的高度,顶面与底面的分段数,侧面的分段数,(是否没有顶面和底面,布尔类型,缺省值为false,表示有顶面和底面)) 正四面体(TetrahedronGeometry)、正八面体(OctahedronGeometry)、正二十面体(IcosahedronGeometry) 圆环面--- //圆环半径,管道半径,径向的分段数,管的分段数,圆环面的弧度(Math.PI*2) THREE.TorusGeometry(radius,tube,radialSegments,tubularSegments,arc) 圆环结--- //圆环半径,管道半径,径向的分段数,管的分段数, //p\Q:对knot(节)状方式有效,控制曲线路径缠绕的圈数,其中p决定垂直方向的参数(可缺省) //水平方向的参数(可缺省),(z轴方向上的缩放,默认值1 ) THREE.TorusKnotGeometry(radius,tube,radialSegments,tubularSegments, p, q, heightScale) 材质--- MeshBasicMaterial:对光照无感,给几何体一种简单的颜色或显示线框。 MeshLambertMaterial:这种材质对光照有反应,用于创建暗淡的不发光的物体。 MeshPhongMaterial:这种材质对光照也有反应,用于创建金属类明亮的物体。 var material = new THREE.MeshBasicMaterial({ color: 0xffff00, opacity: 0.75 }); obj中的对象属性有---visible:是否可见 side:渲染面片正面或是反面,默认为正面THREE.FrontSide,可设置为反面THREE.BackSide,或双面THREE.DoubleSide wireframe:是否渲染线而非面,默认为false color:十六进制rgb颜色,红色为0xff0000 map:使用纹理贴图 法向材质--- 法向材质可以将材质的颜色设置为其法向量的方向,有时候对于调试很有帮助。 new THREE.MeshNormalMaterial() 材质的纹理贴图--- var texture = THREE.ImageUtils.loadTexture('img/0.png'); var material = new THREE.MeshLambertMaterial({ map: texture }); 文字形状--- THREE.TextGeometry(text, parameters) parameters={ size:18, height://文字的厚度 curveSegments://弧度分段数,使得文字的曲线更加光滑 font://字体 weight://值可选 normal bold style://值可选 normal italics bevelEnabled://布尔值,是否使用倒角,意为在边缘处斜切 bevelThickness://倒角厚度 bevelSize://倒角厚度 } 网格--- var mesh=new THREE.Mesh(geometry,material); scene.add(mesh); 在网格北创建后,也能对材质进行修改 mesh.meterial=new THREE.MeshLamberMatewrial({ color:0x00ff00 }) 网格的属性--- mesh.position.set(x,y,z)获取mesh.position=new THREE.Vector3(1.5,-0.5,0); 缩放---scale(x,y,z) 旋转---rotation(x,y,z) 动画--- setInterval(function(){ },1000/60)