我正在試圖讓如何繪製在HTML5對象時,但在信息的多個不同來源找到了不同的解釋已經引起了一些混亂做矩陣變換的理解。我發現信息說,爲了在html5中創建繪製對象的動畫,如here所示,同時我也看到可以通過轉換繪製的點將變換應用於頁面上的單個對象,但我不確定它是如何實現的作品。功能HTML5矩陣變換
我發現,實現腿的動畫(兩行)代碼示例,但它確實動畫不施加轉換到帆布,使用用於在某些其他文件中定義的變換矩陣的功能對象。該代碼提供了自己的實現moveTo()
和lineTo()
(通常與畫布對象一起使用),在該實現中,它轉換傳入的點,根據視口重新調整其位置,然後調用畫布的移動版本以傳遞轉化點。
所以這裏有幾點困惑: 1.當setTransform()只能在畫布上使用時,在變換矩陣對象上實現新的變換函數的目的是什麼? 2.方法如rotate()
和translate()
在矩陣對象上被調用而沒有傳入點,所以這些操作如何實際應用? 3.什麼時候應該將轉換應用於整個畫布(如所提供的鏈接所做的那樣),而不是繪製特定的對象,因爲它們似乎都可以工作?
我一般只是尋找相關的一般概述,我相當困惑是如何工作的。從該示例中的代碼是下面供參考:
<head>
<script src=g.js></script>
<script src=matrix4x4.js></script>
</head>
<body onload=g_start()>
<canvas id=myCanvas1 width=480 height=480></canvas>
<script>
var w, h, g;
function viewport(p) {
return [ w/2 * p[0] + w/2, h/2 - p[1] * w/2 ];
}
function moveTo(p) {
var q = m.transform(p); // APPLY 3D MATRIX TRANFORMATION
var xy = viewport(q); // APPLY VIEWPORT TRANSFORM
g.moveTo(xy[0], xy[1]);
}
function lineTo(p) {
var q = m.transform(p); // APPLY 3D MATRIX TRANFORMATION
var xy = viewport(q); // APPLY VIEWPORT TRANSFORM
g.lineTo(xy[0], xy[1]);
}
myCanvas1.animate = function(_g) {
g = _g;
w = g.canvas.width;
h = g.canvas.height;
g.fillStyle = 'rgb(200,140,255)';
g.beginPath();
g.moveTo(0, 0);
g.lineTo(w, 0);
g.lineTo(w, h);
g.lineTo(0, h);
g.lineTo(0, 0);
g.stroke();
g.fillStyle = 'rgb(128,0,0)';
g.strokeStyle = 'rgb(0,0,0)';
var legBend = .4;
var t = 3 * time;
for (var leg = 0 ; leg < 2 ; leg++) {
var angle = -Math.PI/2 * (1 + Math.sin(time));
console.log(angle);
var sign = (leg == 0) == (angle < -Math.PI/2) ? -1 : 1;
m.identity();
m.rotateY(-Math.PI/2 * (1 + Math.sin(time)));
g.beginPath();
m.translate(0, .5, .1 * sign);
moveTo([0,0,0]); // HIP
m.rotateZ(-.5 * legBend + sign * legBend * Math.cos(t));
m.translate(0, -.5, 0);
lineTo([0,0,0]); // HIP
m.rotateZ(2 * legBend + 2 * legBend * sign * Math.sin(t));
m.translate(0, -.5, 0);
lineTo([0,0,0]); // KNEE
m.translate(-.1, 0, 0);
lineTo([0,0,0]); // KNEE
g.strokeStyle = 'rgb(0,0,0)';
g.lineWidth = 30;
g.stroke();
g.strokeStyle = 'rgb(255,0,0)';
g.lineWidth = 20;
g.stroke();
}
}
</script>
</body>
它讓我在身體上感到痛苦,因爲看不到'src = g.js'的引號。 –