Oh, I'm sure beer payments are due both ways. But hey, whatever keeps them
coming!

Glad you got it working, btw.

Cheers,
Ivan


On Sun, Mar 6, 2011 at 7:29 PM, Frank Rueter <[email protected]> wrote:

> Brilliant. I am amazed that I actually did almost exactly what you are
> outlining, haha. But I was so not sure if I'm doing the right thing, so
> thanks heaps for clarifying/assuring!
> One day we might end up in the same city and there will be beer payments
> due!
>
> cheers,
> frank
>
>
> On Mar 7, 2011, at 3:42 PM, Ivan Busquets wrote:
>
> Hallo, Frank.
> Despite writing that tutorial, I am by no means an expert in matrix and
> maths. :)
>
> But I've learnt a thing or two about how they apply to things like camera
> transforms, etc., so hopefully I'll be able to help with this one.
>
> I think the easiest in your case (easiest to code, not necessarily to
> understand :p) is to start with the camera's transformation matrix instead
> of the Euler rotations. If you want to use Euler angles as a starting point,
> then you'll need to check for rotation order and such.
>
> To get the camera's transformation matrix, i usually do one on the
> following:
>
> - If your camera doesn't have any other Cameras or Axis driving its final
> transformation, you can simply do:
>
> cam_transform = nuke.toNode('camera_name')['transform'].value()
>
> - If you're interested in getting the final transformation matrix of a
> concatenated set of transforms, I usually use the following to wrap the
> contents of the 'world_matrix' knob into a nuke.math.Matrix4 object:
>
> #########
> def getCameraTransformMatrix(cameraNode):
> m = nuke.math.Matrix4()
> try:
> for i in range(0,16):
> m[i] = cameraNode['world_matrix'].value(i%4, i/4)
> except:
> print "couldn't get all values for a 4x4 Matrix. Identity matrix returned
> instead"
> m.makeIdentity()
>  return m
> ##############
>
>
> Finally, once you have your transformation matrix in a nuke.math.Matrix4
> object, getting the lookAt and the Up vectors should be a matter of setting
> the initial direction of those two vectors, and then transform them using
> the matrix.
>
> I.E.
>
> # For a single, non concatenated camera. Otherwise use the helper funcion
> above.
> cam_matrix = nuke.toNode('camera_name')['transform'].value()
>
> # set up initial lookAt vector
> lookAt = nuke.math.Vector3(0,0,-1) # because Nuke's default cam looks at -Z
>
> # Initial up vector
> up = nuke.math.Vector3(0,1,0)
>
> #Final lookAt vector
> lookAt = cam_matrix.vtransform(lookAt)
>
> #Final up vector
> up = cam_matrix.vtransform(up)
>
> # Note that the key here is to use the "vtransform" method instead of
> "transform", since you want to apply the transformation to a direction
> vector, but ignore any scaling or translation.
>
> I think this should get you the right values to go from a Nuke camera to,
> say, a Camera + Aim + Up in Maya (don't have Maya here to check, though).
>
> Hope that helps!
>
> Cheers,
> Ivan
>
>
> On Sun, Mar 6, 2011 at 3:06 PM, Frank Rueter <[email protected]>wrote:
>
>> Hola,
>>
>> has anybody converted a nuke camera (Euler rotations) to LookAt and Up
>> vectors? as used by some other applications
>> I am just starting to read Ivan's tutorial on Nukepedia hoping it will
>> shed some light on this for somebody with very limited understanding of 3D
>> rotational maths (aka "me") but thought I'd spread my feelers in here at the
>> same time.
>>
>> Cheers,
>> frank_______________________________________________
>> Nuke-python mailing list
>> [email protected]
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
>
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
_______________________________________________
Nuke-python mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to