Difference between revisions of "Shear"
(Created page with "This function was borrowed from way's [https://love2d.org/forums/viewtopic.php?f=5&t=1692&p=16988 3D dice roller demo]. It performs a [https://en.wikipedia.org/wiki/...") |
(Hint shear parameters in love.graphics.draw) |
||
Line 20: | Line 20: | ||
end | end | ||
</source> | </source> | ||
+ | |||
+ | '''Note:''' If you just want to shear a single image, you can use the shear parameters in [[love.graphics.draw]] (added in version 0.8.0). | ||
[[Category:Snippets]] | [[Category:Snippets]] |
Revision as of 16:45, 23 April 2012
This function was borrowed from way's 3D dice roller demo. It performs a graphics shear (AKA "skew") coordinate transformation (which affects all following draws). It's recommended to perform a love.graphics.push before shearing.
function shear(ox, oy, xx, xy, yx, yy)
local atan2, acos, tan = math.atan2, math.acos, math.tan
local ex, ey, fx,fy = xx-ox, xy-oy, yx-ox, yy-oy
if ex*fy<ey*fx then ex,ey,fx,fy=fx,fy,ex,ey end
local e,f = (ex*ex+ey*ey)^.5, (fx*fx+fy*fy)^.5
ex,ey = ex/e, ey/e
fx,fy = fx/f, fy/f
local desiredOrientation=atan2(ey+fy,ex+fx)
local desiredAngle=acos(ex*fx+ey*fy)/2
local z=tan(desiredAngle)
local distortion=((1+z*z)/2)^.5
love.graphics.translate(ox, oy)
love.graphics.rotate(desiredOrientation)
love.graphics.scale(1, z)
love.graphics.rotate(-pi/4)
love.graphics.scale(e/distortion,f/distortion)
end
Note: If you just want to shear a single image, you can use the shear parameters in love.graphics.draw (added in version 0.8.0).
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info