html5画布 - 模拟图像的3D旋转

时间:2013-11-15 04:28:10

标签: html5 math canvas html5-canvas

我有一个方形的图像。我想旋转并挤压它以获得3D效果,如下图所示:

来源图片: Source image

旋转到0度并挤压: enter image description here

旋转到45度并挤压: enter image description here

像这样。

我玩过Math并试图通过乘以角度的WidthHeight来更改图片的SinCos

var w = image.width*Math.cos(angle* TO_RADIANS);
var h = image.height*Math.sin(angle* TO_RADIANS);
h=h*2/3; //squeezing the height
ctx.drawImage(image,  0, 0, w, h); 

但我不擅长数学,所以我希望有人可以帮助我解决这个问题。

2 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。我在photoshop中挤压了我的图像。因此,图像变成300x150大小,看起来像上面的第二张图片。然后我在任何时候都应用了一个函数,当我需要根据角度重绘图像时:

        var TO_RADIANS = Math.PI/180;
        ctx.save();         
        ctx.translate(x, y);            
        ctx.rotate(angle * TO_RADIANS);                     
        var w = image.width-Math.abs((image.width/2)*Math.sin(angle* TO_RADIANS));
        var h = image.height+Math.abs((image.height)*Math.sin(angle * TO_RADIANS));
        ctx.translate(-w/2, -h/2);
        ctx.drawImage(image,  0, 0, w, h);          
        ctx.restore();

现在效果很好。

答案 1 :(得分:0)