[cairo] [patch] enable projective transformations
Arjen Nienhuis
a.g.nienhuis at gmail.com
Tue Aug 17 03:29:54 PDT 2010
On Tue, Aug 17, 2010 at 11:05 AM, Maarten Bosmans <mkbosmans at gmail.com> wrote:
> 2010/8/17 Bill Spitzak <spitzak at gmail.com>:
>> Maarten Bosmans wrote:
>>>
>>> This is a first attempt to add projective transformations to Cairo. It
>>> is far from complete, but mostly meant to get the discussion going
>>> about how such a feature should be implemented.
>>
>> I believe if you want to concatenate transforms you need to keep 12 numbers
>> (a 4x3 matrix) around. Otherwise not enough information is remembered so
>> that two "rotate about the y axis by 10 degrees" can produce the same result
>> as one "rotate about the y axis by 20 degrees". The 8 number cannot
>> distinguish such a rotation from a horizontal scale by 1-sin(10 degrees).
>
> I'm not really sure what you are trying to say here. How could two
> rotations possibly be the same as a scaling?
>
In current cairo there's one rotate: around the z-axis.
Rotating an image around the y axis without perspective whould to be
the same as scaling in the x-direction.
>> Treating these as 3 rows (or columns) of a 4x4 matrix will allow you to
>> multiply them. The last row/column will be [0,0,0,1] always, similar to the
>> current Cairo matrix.
>
> My first suggestion to look at the SVG spec was not good. For Cairo we
> should stick to 2D. I don't think posititioning flat surfaces in a 3D
> space and then projecting back in a 2D plane gains us anything.
>
You will need that for all the primitives that are flat and only
defined on a 2d plane. Things like circles, text etc.
I can't really think of a model that's easier to apply to cairo and I
don't know of a use case that would not be supported by that model.
More information about the cairo
mailing list