Glad to hear. :) In all fairness, I think it is very awkward that one would need to do that in the first place. Specially if you can pass a matrix object as an argument to setValue(), one would expect that the knob should be filled so it performs the same transformation as the passed matrix object. It's not the first time this has been flagged as problematic in this list, I think.
But anyway, glad you got it working. Cheers, Ivan On Mon, Aug 22, 2011 at 7:12 PM, Pete O'Connell <[email protected]>wrote: > 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 >
_______________________________________________ Nuke-users mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
