您的位置:首页 - 教程 - HTML5 - 正文
html5 canvas绘制3D转动地球动画
查看效果:http://hovertree.com/texiao/html5/8.htm



给我一个支点,我就可以撬动地球 阿基米德



下载

代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>html5 canvas让地球转动起来 - 何问起</title><base target="_blank" />
<script type="text/javascript" src="http://hovertree.com/texiao/html5/8/clay.min.js"></script>
<script type="text/javascript">
function Earth() {
var stage = new Clay.Stage(800, 600);
var world = stage.getWorld();
var camera = stage.getCamera();

camera.set(0,0,0);
camera.setResolution(800, 600);
camera.setTarget(new Clay.Vector(-100,0,100));

window.onresize = function() {
stage.resizeTo(
//window.innerWidth || document.documentElement.clientWidth,
//window.innerHeight || document.documentElement.clientHeight
800,600
);
};

window.onresize();
Clay.Collada.load('http://hovertree.com/texiao/html5/8/earth.xml', function (scene) {
scene.init(stage);

var earth = new Clay.Texture('http://hovertree.com/texiao/html5/8/earthmap1k.jpg', stage);

var clouds = new Image();
clouds.src = 'http://hovertree.com/texiao/html5/8/earthclouds1k.png';

var dark = new Image();
dark.src = 'http://hovert'+'ree.com/texiao/html5/8/darkside.png';

var waiting = setInterval(function(){
if (earth.complete && clouds.complete && dark.complete){
clearInterval(waiting);
play();
}
}, 1000);

function play() {
var shape = world.getShapes()[0];
shape.setMaterial(earth);

var x, y, z, t = Math.PI/4, r = 0, tick = 0.01, radius = 200;
var ttx = earth.canvas.getContext('2d');
var base = earth.image;
var wind = 0;

stage.addEvent('enterframe', function(){

ttx.drawImage(base, 0,0);
var pos = (++wind)%1000;
ttx.drawImage(clouds, pos, 0);
ttx.drawImage(clouds, pos-1000, 0);
ttx.drawImage(dark, 0,0);

t += tick;
x = -100 + Math.sin(t) * radius;
z = 100 + Math.cos(t) * radius;
y = Math.cos(t/3) * 50
camera.set(x, y, z);
});

stage.run();
}
});
}
window.addEventListener('load', function(){
new Earth();
}, false);
</script>
<style type="text/css">
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
position: relative;
background: black;
}

.canvas3D {
background: black;
position: absolute;
left: 0;
top: 0;
}
.earthhovertree{z-index:4321;position:fixed;left:789px;color:white;height:1234px}a{color:white}
</style>
</head>
<body>
<div class="earthhovertree">
<h3>给我一个支点,我就可以撬动地球 阿基米德</h3>
<h3>给我一个HTML5浏览器,我就能转动地球 何问起</h3>
<a href="http://hovertree.com">首页</a>
<a href="http://hovertree.com/texiao/">特效</a>
<a href="http://hovertree.com/hvtart/bjae/dubjwt12.htm">原文</a>
<a href="http://hovertree.com/texiao/html5/7.htm">时钟</a>
<a href="http://hovertree.com/texiao/css/12.htm">登录</a>
<a href="http://hovertree.com/texiao/css/8.htm">打火机</a>
<a href="http://hovertree.com/texiao/html5/6.htm">玫瑰花</a>
<a href="http://hovertree.com/texiao/css/9.htm">3D文字</a>
<br />Clay - A 3D engine on canvas
<br />
<img src="http://hovertree.com/hvtimg/201512/pcmkj3ib.png" alt="阿基米德" />

</div>
<div>
<div id="canvas">
您的浏览器不支持canvas,请使用支持HTML5的浏览器查看本页。何问起 hovertree.com
</div>
</div>
</body>
</html>

评论: