Hi Ivan,

thanks, for your help, I on my side however am not sure if I understand you 
right and if we're talking about the same ;) 
So let me try to explain better:

Here's what I'm doing:

1.)Make a Vector 4 which is the bottom left corner of a card that sits at z=-1
pt=nuke.math.Vector4(-0.5,-0.5,-1,1)

2.)get the projection matrix for my camera, that sits at z=3, as you can see 
below, cameratransforms are already in the matrix
cameraMat=nukescripts.snap3d.cameraProjectionMatrix(nuke.toNode("Camera1"))
{512, 0, 0, 0, 0, 512, 0, 0, -128, -128, -1.00002, -1, 384, 384, 2.80006, 3}

3.) project them by multiplying the Vector with the matrix
result=cameraMat*pt

{256, 256, 3.80008, 4}

Then I want to inverse the wohle thing so I do the following

1.) Invert camera projection matrix
cameraMatInv=cameraMat.inverse()

2.) unproject by multiplying the inverse matrix with the result Vector from 
above
ptNew=cameraMatInv*result
{-0.5, -0.5, -1, 1}

So all works fine up to here. When I interpret my Vector(result) it seems to me 
that w=distance from camera to object, which is exactly my deep value. To get x 
and y pixel coordinates I divide x/w and y/w as you said. So in this process I 
seem to drop my z value as I don't need it.

If now however I have a deep Image and the coressponding camera, I have the 
following values x=64,y=64,deep=4,z=0.25 
to build my Vector4 in homogeneous coordinates I would normaly do the following:

x=x*deep=64*4=256
y=y*deep=64*4=256
z=z*deep=0.25*4=1
w=deep

so the resulting Vector is

px=nuke.math.Vector4(256,256,1,4)
{256,256,1,4} 

that already doesn't look like the Vector result from above so unprojecting it
cameraMatInv*px

doesn't return the point I'm looking for:
{-0.5, -0.5, 41.0008, 15.0003}

So now my question is, when I have a deep Image and know x,y,zDepth and deep 
aswell as all the camera Parameters, how do I calculate z of my Vector4?

I hope that it's clearer now.
Thanks a lot for your help!

cheers,
Patrick



----- Original Message -----
From: ivanbusqu...@gmail.com
To: nuke-python@support.thefoundry.co.uk
Date: 04.11.2012 02:19:14
Subject: Re: [Nuke-python] Projection matrix question


> Hi Patrick,
> 
> If I understand your question correctly, you'll want to follow these steps:
> 
> 1. un-project your 2D coord into 3D space (using cam projection matrix)
> 2. divide the resulting vector by its 4th component (w coordinate)
> 3. Scale the vector so that its Z == -depth_sample
> 4. Apply camera transformations (if any) to go from camera to world
> space (using cam transform matrix)
> 
> Hope that helps.
> 
> Cheers,
> Ivan
> 
> On Fri, Nov 2, 2012 at 3:30 AM, Patrick Heinen
> <mailingli...@patrickheinen.com> wrote:
>> Hi everyone,
>> 
>> I'm trying to project a point from a deep image back to 3d space. I'm 
>> currently taking the camera projection matrix, inverting it and multiplying 
>> it with a Vector 4 {pixelX*deep,pixelY*deep,deep,deep}.
>> However this doesn't give me the exact position.
>> When projecting from 3d to 2d the 3rd position of the resulting vector is 
>> not equal to the 4th position, the value changes as a function of the 
>> distance from camera to object and the near crop.
>> To get the exact point in 3d I now need to be able to reconstruct this 3rd 
>> position in the vector.
>> Does anyone know how it is calculated?
>> 
>> Thanks
>> Patrick
>> _______________________________________________
>> Nuke-python mailing list
>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to