By no modification of the w component, I meant no renormalising, just compute the product as for regular matrix/vector multiplication.
On Wed, Dec 7, 2011 at 9:33 PM, Andrew Hale <[email protected]>wrote: > Hi Paul, > > Correct me if I'm wrong, but do you propose to have 3D vectors with matrix > multiplication just work (i.e. making assumptions about the w coordinate > and renormalising if necessary) but retain 4D vectors which compute the > product without modification of the w component? This sounds quite logical, > however, these transformations deal with points so I'm not sure I > understand what you mean by differentiating between vectors and normals. > > Thanks again, > Andrew > > > On Wed, Dec 7, 2011 at 9:15 PM, Andrew Hale <[email protected]>wrote: > >> Hi Paul, >> >> You make an excellent point (no pun intended!), this is correct and I >> made the mistake of not considering points vs vectors here. Would it be >> suitable then just to assume those using 4D vectors are aware of the >> pitfalls/issues? >> >> Thanks, >> Andrew >> >> >> On Wed, Dec 7, 2011 at 9:03 PM, Paul Melis <[email protected]> wrote: >> >>> Hi Andrew, >>> >>> On 12/02/2011 12:47 PM, Andrew Hale wrote: >>> > I've written a proposal to change the current handling of >>> transfomations of >>> > vectors and remove the use cases for 4D vectors. The proposal can be >>> found >>> > here: >>> > >>> http://wiki.blender.org/index.php/User:TrumanBlending#Proposal:_Four_Dimensional_Mathutils_Vectors >>> >>> A few comments on your proposal: >>> >>> (x1, y1, z1, 1) + (x2, y2, z2, 1) = (x1+x2, y1+y2, z1+z2, 2) >>> >>> This addition doesn't make much sense. You're adding two 3D points here, >>> i.e. 3D coordinates, for which there is no sensable geometric >>> interpretation. Addition of two 3D *vectors*, i.e. 3D directions, does >>> make sense, but in that case the w component should be 0. E.g. >>> >>> (x1, y1, z1, 0) + (x2, y2, z2, 0) = (x1+x2, y1+y2, z1+z2, 0) >>> >>> The value of w is also the major difference between representations of >>> points and vectors in homogenous coordinates. When sticking to w=0 for >>> vectors and w=1 for points things like subtraction actually make sense: >>> >>> (4, 4, 4, 1) - (1, 1, 1, 1) = (3, 3, 3, 0) >>> >>> That is, subtracting two 3D points results in a vector that points from >>> the second point to the first. Subtraction of vectors also just works: >>> >>> (0, 1, 0, 0) - (1, 0, 0, 0) = (-1, 1, 0, 0) >>> >>> Adding a vector to a point gets you a new point: >>> >>> (1, 2, 3, 1) + (4, 4, 4, 0) = (5, 6, 7, 1) >>> >>> The point being that in these cases you don't need to explicitly worry >>> about the w component, as for the sensible operations the results are >>> correct. It's only with applying transformation matrices that you need >>> to normalize the result by dividing by the w-component of the result >>> (but only if it is non-zero). >>> >>> >>> In general I would say, just like Stephen Swaney did somewhere in this >>> thread, that there's two kinds of users: >>> >>> 1. The first type of user doesn't need/want to know about the underlying >>> complexities of 3D math. He/she just wants to do simple manual >>> transformations on 3D geometry. The easiest interface would be to >>> provide methods in the Matrix class for transforming points, vectors and >>> normals specified as 3-tuples (e.g. transformPoint(Vector3), >>> transformVector(Vector3), transformNormal(Vector3)). These methods can >>> then hide the underlying assumptions about the value of the w component >>> and the different method needed for transforming vectors versus normals. >>> The results from these methods would be 3-tuples as well. By using >>> multiplication of transformation matrices you can simply compose >>> transformations from separate steps. I think that's about all the >>> operations this group of users wants to do (but correct me if I'm wrong). >>> >>> 2. The second type of user knowns his 3D math and just wants to work >>> with general 4x4 transformation matrices and the operations on length-4 >>> tuples. They will worry themselves about homogenous coordinates and >>> such. These users also know that v*M and M*v produce different results >>> and ignore the fact that v plays the role of column-vector versus >>> row-vector here, etc. >>> >>> I consider myself to be in the second category and completely removing >>> vectors with homogenous coordinates from the Blender API makes me >>> nervous. I don't think the two types of usage conflict, it's more about >>> providing different APIs for accomplishing the same thing and educating >>> users in the first category what methods to use, providing good example >>> scripts, etc. >>> >>> Just my 2 euro-cents, >>> Paul >>> >>> >>> >>> >>> _______________________________________________ >>> Bf-committers mailing list >>> [email protected] >>> http://lists.blender.org/mailman/listinfo/bf-committers >>> >> >> > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
