看了 3D动画原理 自己就 写了 一个。
下载 即可运行。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">
<title>Document</title>
<script>
</script>
</head>
<body >
<canvas id="canvas" width="600px" height="600px" style="width:600px;height:600px"></canvas>
<script>
var context=document.getElementById('canvas').getContext("2d");
function mul(a,b){
var result=[]
for(var i=0; i<a.length; i++) {
result[i]=[]
//对b的每列进行遍历
for(var j=0;j<b[0].length; j++) {
//c为每一个点的值
var c = 0;
//第i行j列的值为a的第i行上的n个数和b的第j列上的n个数对应相乘之和,其中n为a的列数,也是b的行数,a的列数和b的行数相等
for(var k=0; k<a[0].length; k++) {
c += (a[i][k]*b[k][j]);
}
result[i][j] = c;
}
}
return result;
}
var ViewPort={
x:0,
y:0,
dist:1000,
create:function(x,y,dist){
var obj=Object.create(this);
obj.x=x;
obj.y=y;
obj.dist=dist;
return obj;
}
}
var ver3d={
x:0,
y:0,
z:0,
vX:ViewPort.x,
vY:ViewPort.y,
dist:ViewPort.dist,
create:function(x,y,z){
var obj=Object.create(this);
obj.x=x;
obj.y=y;
obj.z=z;