Three.js入门----简单立方体动画
2017-09-07 09:42
573 查看
设置样式:
声明并初始化Renderer (渲染器对象):
初始化Scene (场景):
添加Cube (立方体):
完整代码:自行调整three.js引包的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="three.js"></script>
<style>
*{ margin: 0; padding: 0; }
</style>
</head>
<body>
<script>
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
renderer.setClearColor("gray");
document.body.appendChild(renderer.domElement);
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);
camera.position.set(4,6,6);
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 0;
camera.lookAt({
x:0,
y:-5,
z:0,
});
var geometry1 = new THREE.CylinderGeometry(0.2,0.2,3,10);
var material1 = new THREE.MeshBasicMaterial({color:"green"});
var cylinders=[];
cylinders[0] = new THREE.Mesh(geometry1,material1);
cylinders[1] = new THREE.Mesh(geometry1,material1);
cylinders[2] = new THREE.Mesh(geometry1,material1);
cylinders[3] = new THREE.Mesh(geometry1,material1);
cylinders[0].position.x=-4;
cylinders[0].position.y=1.5;
cylinders[0].position.z=-4;
cylinders[1].position.x=4;
cylinders[1].position.y=1.5;
cylinders[1].position.z=-4;
cylinders[2].position.x=-4;
cylinders[2].position.y=1.5;
cylinders[2].position.z=4;
cylinders[3].position.x=4;
cylinders[3].position.y=1.5;
cylinders[3].position.z=4;
var geometry = new THREE.CubeGeometry(1,1,1);
var material = new THREE.MeshLambertMaterial({color:"yellow",wireframe: true});
var cube = new THREE.Mesh(geometry,material);
cube.position.x=0;
cube.position.y=2;
cube.position.z=0;
var lights = [];
lights[0] = new THREE.PointLight( "white", 1, 0 );
lights[0].position.set( 0, 4, 0 );
var helper = new THREE.CameraHelper(lights[0].shadow.camera);
var planeGeometry=new THREE.PlaneGeometry(20,15,10,10);
var planeMaterial=new THREE.MeshLambertMaterial({color:"white"});
var plane=new THREE.Mesh(planeGeometry,planeMaterial);
plane.rotation.x=-0.5*Math.PI;
plane.position.x=0;
plane.position.y=0;
plane.position.z=0;
scene.add(lights[0]);
scene.add(plane);
scene.add(cube);
//scene.add(helper);
for(var i=0;i<cylinders.length;i++){
scene.add(cylinders[i]);
}
renderer.shadowMapEnabled = true;
lights[0].castShadow = true;
cube.castShadow=true;
plane.receiveShadow=true;
for(var i=0;i<cylinders.length;i++){
cylinders[i].castShadow=true;
}
var p=0.05;
function render() {
requestAnimationFrame(render);
cube.rotation.x+=0.05;
//cube.rotation.y+=0.1;
if(cube.position.x>=3||cube.position.x<=-3) {
p = -p;
}
cube.translateX(p);
renderer.render(scene,camera);
}
render();
</script>
</body>
</html>
*{ margin: 0; padding: 0; }
声明并初始化Renderer (渲染器对象):
//初始化renderer渲染器对象 var renderer = new THREE.WebGLRenderer(); //设置renderer的宽,高(例子为充满屏幕) renderer.setSize(window.innerWidth,window.innerHeight); //添加dom元素到页面 document.body.appendChild(renderer.domElement); //设置renderer的默认颜色和透明度 renderer.setClearColor("gray",1.0);
初始化Scene (场景):
var scene = new THREE.Scene();初始化Camera (相机):
//perspective透视投影相机,(fov,aspect,near,far)四个参数依次为投影角度,近端裁切面宽高比,近端裁切面与相机的距离,远端裁切面与相机的距离 var camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000); //设置相机的位置 camera.position.x=0; camera.position.y=2; camera.position.z=7; //设置相机聚焦的位置,例子为聚焦场景;也可以设置自定义位置。 camera.lookAt(scene.position);
添加Cube (立方体):
//创建(长,宽,高)均为1的几何体(立方体) var geometry = new THREE.CubeGeometry(1,1,1); //设置立方体材质 var material = new THREE.MeshLambertMaterial({color:"yellow"}); //生成立方体,使用几何体geometry和材质material var cube = new THREE.Mesh(geometry,material); //设置立方体的位置 cube.position.x=0; cube.position.y=2; cube.position.z=0;添加光源(例子为点光源):
//例子以数组的形式添加,也可以单独添加;其他(相机,几何体,平面等等)也同样可以使用数组添加。 var lights = []; //添加点光源,参数依次为颜色,强度,距离。强度为0-1,1为满光照强度;距离为0时表示光源不衰减。 lights[0] = new THREE.PointLight( "white", 1, 0 ); //设置光源位置 lights[0].position.set( 0, 10, 0 );添加平面(为了接收立方体投影):
//设置几何体,材质,生成平面(与立方体类似) var planeGeometry=new THREE.PlaneGeometry(5,5,10,10); var planeMaterial=new THREE.MeshLambertMaterial({color:"white"}); var plane=new THREE.Mesh(planeGeometry,planeMaterial); //平面旋转-90度,并设置平面位置。平面初始为x,y轴所在平面。 plane.rotation.x=-0.5*Math.PI; plane.position.x=0; plane.position.y=0; plane.position.z=0;将相机,立方体,平面添加到场景中:
scene.add(lights[0]); scene.add(cube); scene.add(plane);开启光源投影:
//Three.js中光源默认不会导致物体投影,开启投影步骤为: //打开渲染器的地图阴影: renderer.shadowMapEnabled = true; //开启光源投影: lights[0].castShadow = true; //把模型设置为生成投影:例子需要将立方体投影到平面上 cube.castShadow=true; //把模型设置为接收阴影: plane.receiveShadow=true;设置动画:
var p=0.05; function render() { //动画自循环 requestAnimationFrame(render); //沿X轴旋转 cube.rotation.x+=0.05; //cube.rotation.y+=0.1; //设定位移边界,并开始位移 if(cube.position.x>=3||cube.position.x<=-3) { p = -p; } cube.translateX(p); //渲染器渲染场景和相机 renderer.render(scene,camera); } render();
完整代码:自行调整three.js引包的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="three.js"></script>
<style>
*{ margin: 0; padding: 0; }
</style>
</head>
<body>
<script>
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
renderer.setClearColor("gray");
document.body.appendChild(renderer.domElement);
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);
camera.position.set(4,6,6);
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 0;
camera.lookAt({
x:0,
y:-5,
z:0,
});
var geometry1 = new THREE.CylinderGeometry(0.2,0.2,3,10);
var material1 = new THREE.MeshBasicMaterial({color:"green"});
var cylinders=[];
cylinders[0] = new THREE.Mesh(geometry1,material1);
cylinders[1] = new THREE.Mesh(geometry1,material1);
cylinders[2] = new THREE.Mesh(geometry1,material1);
cylinders[3] = new THREE.Mesh(geometry1,material1);
cylinders[0].position.x=-4;
cylinders[0].position.y=1.5;
cylinders[0].position.z=-4;
cylinders[1].position.x=4;
cylinders[1].position.y=1.5;
cylinders[1].position.z=-4;
cylinders[2].position.x=-4;
cylinders[2].position.y=1.5;
cylinders[2].position.z=4;
cylinders[3].position.x=4;
cylinders[3].position.y=1.5;
cylinders[3].position.z=4;
var geometry = new THREE.CubeGeometry(1,1,1);
var material = new THREE.MeshLambertMaterial({color:"yellow",wireframe: true});
var cube = new THREE.Mesh(geometry,material);
cube.position.x=0;
cube.position.y=2;
cube.position.z=0;
var lights = [];
lights[0] = new THREE.PointLight( "white", 1, 0 );
lights[0].position.set( 0, 4, 0 );
var helper = new THREE.CameraHelper(lights[0].shadow.camera);
var planeGeometry=new THREE.PlaneGeometry(20,15,10,10);
var planeMaterial=new THREE.MeshLambertMaterial({color:"white"});
var plane=new THREE.Mesh(planeGeometry,planeMaterial);
plane.rotation.x=-0.5*Math.PI;
plane.position.x=0;
plane.position.y=0;
plane.position.z=0;
scene.add(lights[0]);
scene.add(plane);
scene.add(cube);
//scene.add(helper);
for(var i=0;i<cylinders.length;i++){
scene.add(cylinders[i]);
}
renderer.shadowMapEnabled = true;
lights[0].castShadow = true;
cube.castShadow=true;
plane.receiveShadow=true;
for(var i=0;i<cylinders.length;i++){
cylinders[i].castShadow=true;
}
var p=0.05;
function render() {
requestAnimationFrame(render);
cube.rotation.x+=0.05;
//cube.rotation.y+=0.1;
if(cube.position.x>=3||cube.position.x<=-3) {
p = -p;
}
cube.translateX(p);
renderer.render(scene,camera);
}
render();
</script>
</body>
</html>
相关文章推荐
- three.js 01-04 之简单动画
- 040318_three.js_开关门动画简单实现
- three.js 09-01 之 简单动画
- 如何用javascript实现双向数据绑定 / Backbone.js简单入门范例
- three.js入门
- js模板baidu template简单入门
- three.js立方体
- CSS vs JS动画:谁更快?---简单笔记
- js匿名函数与闭包(简单易懂入门级介绍)
- Cocos2d-js 学习(三): 简单动画使用
- js动画(animate)简单引擎代码示例
- three.js : JavaScript 3D library:最简单的例子
- 前端动画渲染引擎pixi.js系列(1)简单介绍及应用
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- js一百零一夜之第三夜javascript 简单动画实现
- JS实现的简单折叠展开动画效果示例
- dx雾特效,旋转的立方体,文字动画显示,底面简单演示
- Three.js基础探寻四——立方体、平面与球体
- Nodejs&express+mongodb完成简单用户登录(即Nodejs入门)
- JS简单入门教程