Thanks very much Ivan. It works after transposing! Cheers Pete
On Tue, Aug 23, 2011 at 11:34 AM, Ivan Busquets <[email protected]>wrote: > Hi Pete, > > Sorry I forgot to send that example as reference, but what you have so far > is good. > > I think there's just a couple of things you should need to change to get > this working. > > 1- Don't normalize the "from" and "to" coordinates. The matrices you're > building need to map from the "to" corners to a unit square, and then from a > unit square to your from coordinates, using absolute values. > So just do: > > to1x = theCornerpinNode['to1'].value()[0] > etc... > > 2- By the time you fill the "theCornerpinAsMatrix" object, you should have > the correct transformation matrix already, but in column-major order. > Unfortunately, values in matrix knobs seem to be returned (or set when using > setValue) in row-major order, so you would either need to fill in the matrix > knob in a loop mirroring the cell values, or, what I usually do is transpose > the matrix before filling in the knob. > > So, in your script, after this line: > > theCornerpinAsMatrix = projectionMatrixTo * projectionMatrixFrom.inverse() > > You can just do: > > theCornerpinAsMatrix.transpose() > > And then continue as you were. > > See if that helps. > > Cheers, > Ivan > > > > On Mon, Aug 22, 2011 at 6:37 PM, Pete O'Connell > <[email protected]>wrote: > >> #OK I think I'm getting close. I tried Ivan's instructions but I think I >> missed something. It looks really close though. Anyone care to take a look >> at what I have so far? >> >> ############################################################################################################################## >> projectionMatrixTo = nuke.math.Matrix4() >> projectionMatrixFrom = nuke.math.Matrix4() >> >> #dir(projectionMatrix) >> theCornerpinNode = nuke.toNode("CornerPin2D1") >> imageWidth = float(theCornerpinNode.width()) >> imageHeight = float(theCornerpinNode.height()) >> >> #normalized to and from coordinates >> to1x = theCornerpinNode['to1'].value()[0]/imageWidth >> to1y = theCornerpinNode['to1'].value()[1]/imageHeight >> to2x = theCornerpinNode['to2'].value()[0]/imageWidth >> to2y = theCornerpinNode['to2'].value()[1]/imageHeight >> to3x = theCornerpinNode['to3'].value()[0]/imageWidth >> to3y = theCornerpinNode['to3'].value()[1]/imageHeight >> to4x = theCornerpinNode['to4'].value()[0]/imageWidth >> to4y = theCornerpinNode['to4'].value()[1]/imageHeight >> >> from1x = theCornerpinNode['from1'].value()[0]/imageWidth >> from1y = theCornerpinNode['from1'].value()[1]/imageHeight >> from2x = theCornerpinNode['from2'].value()[0]/imageWidth >> from2y = theCornerpinNode['from2'].value()[1]/imageHeight >> from3x = theCornerpinNode['from3'].value()[0]/imageWidth >> from3y = theCornerpinNode['from3'].value()[1]/imageHeight >> from4x = theCornerpinNode['from4'].value()[0]/imageWidth >> from4y = theCornerpinNode['from4'].value()[1]/imageHeight >> >> >> >> projectionMatrixTo.mapUnitSquareToQuad(to1x,to1y,to2x,to2y,to3x,to3y,to4x,to4y) >> >> projectionMatrixFrom.mapUnitSquareToQuad(from1x,from1y,from2x,from2y,from3x,from3y,from4x,from4y) >> >> theCornerpinAsMatrix = projectionMatrixTo*projectionMatrixFrom.inverse() >> >> theNewCornerpinNode = nuke.toNode("CornerPin2D2") >> theNewCornerpinNode['transform_matrix'].setValue(theCornerpinAsMatrix) >> >> >> ############################################################################################################################ >> #Thanks >> #Pete >> >> >> On Tue, Aug 23, 2011 at 10:14 AM, Pete O'Connell <[email protected] >> > wrote: >> >>> Hi Michael. I had a look at the planar tracker but as far as I can tell, >>> that node creates a cornerpin based on the matrix that it calculates, but as >>> far as I can see there is no way in that you can feed the planar tracker >>> cornerpin data and have it calculate the corresponding Matrix. I think >>> nuke.math.Matrix4 is the way. >>> >>> Pete >>> >>> >>> On Tue, Aug 23, 2011 at 3:30 AM, Michael Garrett >>> <[email protected]>wrote: >>> >>>> I haven't got 6.3 in front of me but does the PlanarTracker add anything >>>> into the mix to make this easier? I seem to remember it outputs a 4*4 >>>> matrix for the planar track which is essentially a corner pin but I'll >>>> admit >>>> I need to look more closely at it. >>>> >>>> >>>> On 21 August 2011 23:40, Pete O'Connell <[email protected]>wrote: >>>> >>>>> Thanks a lot Ivan. I'll have a play around with that tonight. >>>>> >>>>> Cheers >>>>> Pete >>>>> >>>>> >>>>> On Mon, Aug 22, 2011 at 3:57 PM, Ivan Busquets <[email protected] >>>>> > wrote: >>>>> >>>>>> Hi Pete, >>>>>> >>>>>> It's very possible, but probably easier to do it in Python than using >>>>>> expression-links. Have a look at the nuke.math.Matrix4 class, and its >>>>>> mapUnitSquareToQuad() method. >>>>>> >>>>>> I have a function somewhere to feed the transformation of a CornerPin >>>>>> node into the "matrix" knob of a roto/rotopaint node that would >>>>>> probably fit the bill for this too. I can try to dig that up if you're >>>>>> interested, but it would roughly consist of the following steps: >>>>>> >>>>>> 1 - Get the coordinates of the 4 "TO" corners from your cornerpin >>>>>> node. >>>>>> 2 - Build a "TO" matrix using mapUnitSquareToQuad(to0.x, to0.y, to1.x, >>>>>> to1.y, ...) >>>>>> 3 - Get the coordinates of the 4 "FROM" corners from your cornerpin >>>>>> node. >>>>>> 4 - Build a "FROM" matrix using mapUnitSquareToQuad(from0.x, from0.y, >>>>>> from1.x, from1.y, ...) >>>>>> 5 - The final transformation matrix should be => to_matrix * >>>>>> from_matrix.inverse(). >>>>>> >>>>>> Then you can use that to fill in the matrix knob in a gridwarp, a roto >>>>>> node, etc. >>>>>> >>>>>> Not the best example, but if you want some more info on how to use >>>>>> nuke.math.Matrix4.mapUnitSquareToQuad(), have a look here (towards the >>>>>> end of the page). >>>>>> >>>>>> >>>>>> http://www.nukepedia.com/written-tutorials/using-the-nukemath-python-module-to-do-vector-and-matrix-operations/page-4/ >>>>>> >>>>>> Hope that helps. >>>>>> >>>>>> Cheers, >>>>>> Ivan >>>>>> >>>>>> On Sun, Aug 21, 2011 at 10:24 PM, Pete O'Connell >>>>>> <[email protected]> wrote: >>>>>> > Hi does anyone know if it is possible somehow to convert cornerpin >>>>>> values to >>>>>> > a 4 by 4 matrix? Seem like it would be useful for the new Gridwarp >>>>>> and >>>>>> > Splinewarp nodes. >>>>>> > Thanks >>>>>> > Pete >>>>>> > >>>>>> > >>>>>> > _______________________________________________ >>>>>> > Nuke-users mailing list >>>>>> > [email protected], >>>>>> http://forums.thefoundry.co.uk/ >>>>>> > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >>>>>> > >>>>>> _______________________________________________ >>>>>> Nuke-users mailing list >>>>>> [email protected], http://forums.thefoundry.co.uk/ >>>>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Pete >>>>> >>>>> _______________________________________________ >>>>> Nuke-users mailing list >>>>> [email protected], http://forums.thefoundry.co.uk/ >>>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >>>>> >>>> >>>> >>>> _______________________________________________ >>>> Nuke-users mailing list >>>> [email protected], http://forums.thefoundry.co.uk/ >>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >>>> >>> >>> >>> >>> -- >>> Pete >>> >> >> >> >> -- >> Pete >> >> _______________________________________________ >> Nuke-users mailing list >> [email protected], http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >> > > > _______________________________________________ > Nuke-users mailing list > [email protected], http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users > -- Pete
_______________________________________________ Nuke-users mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
