threejs:axesHelper、Object3D、position和简单机器人
- AxesHelper可以在场景中显示坐标系,坐标轴的颜色为RGB,分别对应XYZ;参数代表坐标轴长度。
var axesHelper = new THREE.AxesHelper( 500 );
scene.add( axesHelper );
- Object3D
Object3D是所有物体的基类,里面包含很多方法
- position
position可以设置某个物体的位置,obj.position.set(x,y,z);也可以使用上面的translate方法设置位置,都是相对于原点的平移。
- 创建新物体。创建新物体即是创建多个不同的mesh,加入到场景中即可
下面为一个创建简单机器人的例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个three.js文件_WebGL三维场景</title> <style> body { margin: 0; overflow: hidden; } </style> <script src="three.js"></script> <script src="OrbitControls.js"></script> </head> <body> <script> /** * 创建场景对象Scene */ var scene = new THREE.Scene(); /** * 创建网格模型 */ // var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象 /************************body****************************/ var geometry = new THREE.BoxGeometry(100,200,120); //创建一个立方体几何对象Geometry var material = new THREE.MeshLambertMaterial({ color: 0x000ff0 }); //材质对象Material var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh scene.add(mesh); //网格模型添加到场景中 /************************head****************************/ var geometry1 = new THREE.SphereGeometry(50,40,40); //创建一个立方体几何对象Geometry var material1 = new THREE.MeshLambertMaterial({ color: 0xff0000 }); //材质对象Material var mesh1 = new THREE.Mesh(geometry1, material1); //网格模型对象Mesh mesh1.translateY(150); scene.add(mesh1); //网格模型添加到场景中 /************************hand-left****************************/ var geometry2 = new THREE.BoxGeometry(30,100,30); //创建一个立方体几何对象Geometry var material2 = new THREE.MeshLambertMaterial({ color: 0x00ff00 }); //材质对象Material var mesh2 = new THREE.Mesh(geometry2, material2); //网格模型对象Mesh mesh2.translateZ(80); mesh2.translateY(20); scene.add(mesh2); //网格模型添加到场景中 /************************hand-right****************************/ var geometry3 = new THREE.BoxGeometry(30,100,30); //创建一个立方体几何对象Geometry var material3 = new THREE.MeshLambertMaterial({ color: 0x00ff00 }); //材质对象Material var mesh3 = new THREE.Mesh(geometry3, material3); //网格模型对象Mesh mesh3.translateZ(-80); mesh3.translateY(20); scene.add(mesh3); //网格模型添加到场景中 /************************foot-left****************************/ var geometry4 = new THREE.BoxGeometry(40,130,40); //创建一个立方体几何对象Geometry var material4 = new THREE.MeshLambertMaterial({ color: 0x00ff00 }); //材质对象Material var mesh4 = new THREE.Mesh(geometry4, material4); //网格模型对象Mesh mesh4.translateZ(-30); mesh4.translateY(-170); scene.add(mesh4); //网格模型添加到场景中 /************************foot-right****************************/ var geometry5 = new THREE.BoxGeometry(40,130,40); //创建一个立方体几何对象Geometry var material5 = new THREE.MeshLambertMaterial({ color: 0x00ff00 }); //材质对象Material var mesh5 = new THREE.Mesh(geometry5, material5); //网格模型对象Mesh mesh5.translateZ(30); mesh5.translateY(-170); scene.add(mesh5); //网格模型添加到场景中 var axesHelper = new THREE.AxesHelper( 500 ); scene.add( axesHelper ); /** * 光源设置 */ //点光源 var point = new THREE.PointLight(0xffffff); point.position.set(400, 200, 300); //点光源位置 scene.add(point); //点光源添加到场景中 //环境光 var ambient = new THREE.AmbientLight(0x000000); scene.add(ambient); // console.log(scene) // console.log(scene.children) /** * 相机设置 */ var width = window.innerWidth; //窗口宽度 var height = window.innerHeight; //窗口高度 var k = width / height; //窗口宽高比 var s = 500; //三维场景显示范围控制系数,系数越大,显示的范围越大 //创建相机对象 var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000); camera.position.set(200, 0, 0); //设置相机位置 camera.lookAt(scene.position); //设置相机方向(指向的场景对象) /** * 创建渲染器对象 */ var renderer = new THREE.WebGLRenderer(); renderer.setSize(width, height);//设置渲染区域尺寸 renderer.setClearColor(0xb9f3ff, 1); //设置背景颜色 document.body.appendChild(renderer.domElement); //body元素中插入canvas对象 //执行渲染操作 指定场景、相机作为参数 // renderer.render(scene, camera); // function render() { // renderer.render(scene,camera);//执行渲染操作 // } // render(); // var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象 // controls.addEventListener('change', render);//监听鼠标、键盘事件 function render() { renderer.render(scene,camera);//执行渲染操作 // mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度 requestAnimationFrame(render);//请求再次执行渲染函数render } render(); var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象 // 已经通过requestAnimationFrame(render);周期性执行render函数,没必要再通过监听鼠标事件执行render函数 // controls.addEventListener('change', render) </script> </body> </html>





浙公网安备 33010602011771号