我想模拟使用javascript和html5画布(没有webGL)的位图的3D旋转。我认为要走的路是计算画布context.setTransform方法的二维矩阵的术语,但我无法弄清楚如何从一般的4x4矩阵中理想地获得该矩阵,该矩阵表示所需的变换或期望的最终位置以像素为单位(我可以用4x4矩阵和项目视图矩阵计算所需的最终坐标,以像素投影角点)。计算帆布context.setTransform矩阵基于4x4矩阵
在这个小提琴中,我一直在操纵几个角度(代表具有两个自由度的三维摄像机的旋转)来计算setTransform矩阵的剪切项,但我实际上无法获得清晰的洞察力遵循的理想程序。 http://jsfiddle.net/cesarpachon/GQvp2/
context.save();
/*alpha affects the scaley with sin
*/
var skew = Math.sin(alpha);
var scalex = 1;//(1-skew) +0.01;//Math.sin(alpha);
var scaley = 1;//Math.abs(Math.sin(alpha))+0.01;
var offx = 0;
var offy = 0;
var skewx = Math.sin(alpha);
var skewy = Math.sin(beta);
context.setTransform(scalex,skewx,skewy,scaley,offx,offy);
context.drawImage(image, 0, 0, height, width);
context.restore();
有关使用2d上下文模拟3d转换的完整教程超出了stackoverflow问题的范围。这里有一个起点,你会发现很多技巧可以帮助你理解3D视角:http://ajaxian.com/archives/tricks-from-our-flash-friends-3d-in-a-2d-context – markE
也许我可以更好地将我的问题描述为“推断来自2D四边形的投影映射”,即:如何计算canvas.setTransform矩阵,以便将图片拉伸至预定义的形状。 (通过三维变换获得所需形状的坐标并不相关)事实上! – cesarpachon