本文实例讲述了javascript+html5的canvas实现七夕情人节3d玫瑰花效果。分享给大家供大家参考。具体如下:
下面的玫瑰绘制用到了html 5的canvas,所以你的浏览器需要支持html 5。个人还是比较推荐chrome,这个效果在firefox下也会稍卡。
效果图:
具体代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"
"http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<title>3d玫瑰花</title>
<meta name="generator" content="editplus">
<meta name="author" content="">
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<body>
情人节快到了,这里送大家一枝玫瑰,无论是有对象还是没对象的朋友们,情人节快乐~
下面的玫瑰绘制用到了html 5的canvas,所以你的浏览器需要支持html 5。个人还是比较推荐chrome,这个效果在firefox下也会稍卡。
<p id="demo" style="width:520; height:500px;"><canvas id="c" height="500" width="500"></canvas></p>
<script>
var b = document.body;
var c = document.getelementsbytagname("canvas")[0];
var a = c.getcontext("2d");
var canvas = document.getelementsbytagname("canvas")[0];
var ctx = canvas.getcontext("2d");
document.body.clientwidth;
with(m=math)c=cos,s=sin,p=pow,r=random;
c.width=c.height=f=500;h=-250;
function p(a,b,c){
if(c>60)
return[s(a*7)*(13+5/(.2+p(b*4,4)))-s(b)*50,b*f+50,625+c(a*7)*(13+5/(.2+p(b*4,4)))+b*400,a*1-b/2,a];
a=a*2-1;
b=b*2-1;
if(a*a+b*b<1)
{
if(c>37)
{
n=(j=c&1)?6:4;o=.5/(a+.01)+c(b*125)*3-a*300;
w=b*h;
return[o*c(n)+w*s(n)+j*610-390,o*s(n)-w*c(n)+550-j*350,1180+c(b+a)*99-j*300,.4-a*.1+p(1-b*b,-h*6)*.15-a*b*.4+c(a+b)/5+p(c((o*(a+1)+(b>0?w:-w))/25),30)*.1*(1-b*b),o/1e3+.7-o*w*3e-6]
}
if(c>32)
{
c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*s(c)+w*c(c)+620;
return[o*c(c)-w*s(c),28+c(b*.5)*99-b*b*b*60-z/2-h,z,(b*b*.3+p((1-(a*a)),7)*.15+.3)*b,b*.7]
}
o=a*(2-b)*(80-c*2);
w=99-c(a)*120-c(b)*(-h-c*4.9)+c(p(1-b,7))*50+c*2;z=o*s(c)+w*c(c)+700;
return[o*c(c)-w*s(c),b*99-c(p(b, 7))*50-c/3-z/1.35+450,z,(1-b/1.2)*.9+a*.1, p((1-b),20)/4+.05]
}
}
var draw = setinterval("for(i=0;i<1e4;i++)if(s=p(r(),r(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillstyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillrect(x,y,1,1)}",0);
var demo = document.getelementbyid("demo");
function redraw(){
/*
var d_c = document.createelement("canvas");
d_c.setattribute("id","c");
d_c.setattribute("width","520");
d_c.setattribute("height","500");
demo.appendchild(d_c);
*/
draw = setinterval("for(i=0;i<1e4;i++)if(s=p(r(),r(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillstyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillrect(x,y,1,1)}",0);
//alert(d_c);
}
function clear_canvas()
{
ctx.clearrect(0,0,520,500);
//canvas.parentnode.removechild(canvas); //删除
}
function stop_draw(obj){
clearinterval(obj);
}
</script>
</body>
</html>
以上就是javascript+html5的canvas实现玫瑰花的3d效果代码分享的详细内容。