Re: [css3-3d-transforms] skewZ and skew3D

On Jun 2, 2010, at 9:24 AM, Paul Duffin wrote:

> The following was posted in response to a question on 2D transforms.
> Based on that I presume that skew3D() will have similar problems and so not be added.
> However, it seems as though adding a 3rd axis really complicates skew. I am not a graphics expert so I could be misunderstanding what is happening.
> As I understand it in 3D space:
> skewX(a) means skew the X axis in the direction of the Y axis by angle a. It would also be possible to skew the X axis in the direction of the Z axis.
> Similarly:
> skewY(b) means skew the Y axis in the direction of the X axis by angle b. It would also be possible to skew the Y axis in the direction of the Z axis.
> So you need at least 6 variations to deal with just skewing a single axis in each of two possible planes.
> e.g.
> * skewXtoY(a)
> * skewXtoZ(b)
> * skewYtoX(c)
> * skewYtoZ(d)
> * skewZtoX(e)
> * skewZtoY(f)
> skewX would be an alias for skewXtoY
> skewY would be an alias for skewYtoX
> Rather than add all these functions would it not make sense to allow expressions, particularly trigonometric functions in the matrix() and matrix3D() functions. As it stands if I wanted to do the equivalent of skew(a,b) I would have to calculate tan(a) and tab(b) myself and insert them to whatever precision I desire into the matrix() function. It would be clearer and possibly more accurate if I could just use tan() function directly.

Right, when you go from 2D to 3D matrices, the utility of skew becomes increasingly specious. You can achieve a similar effect, if desired, with a combination of rotation and scale. You can rotate an object about an arbitrary axis, then scale, then negate that rotation. That will stretch the object in the direction of the rotation and give you an effect similar to skew, about an arbitrary axis. Given the rarity that this sort of transformation is needed, I think leaving out any primitives for it is a reasonable choice. 


Received on Thursday, 3 June 2010 14:23:26 UTC