Difference between revisions of "Shear"
(Hint shear parameters in love.graphics.draw) |
(Mark it obsolete as of 0.8) |
||
Line 21: | Line 21: | ||
</source> | </source> | ||
− | + | {{New feature|0.8.0| | |
+ | This code has become obsolete as of version 0.8.0. | ||
+ | |||
+ | You can use [[love.graphics.shear]] to shear/skew the whole scene or the shear parameters in [[love.graphics.draw]] to shear/skew a single drawable. | ||
+ | |080}} | ||
[[Category:Snippets]] | [[Category:Snippets]] |
Revision as of 17:07, 15 March 2013
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
Available since LÖVE 0.8.0
This code has become obsolete as of version 0.8.0.
You can use love.graphics.shear to shear/skew the whole scene or the shear parameters in love.graphics.draw to shear/skew a single drawable.
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