| Poster | : Jack | | Posts | : 9 | | Country | : Poland | | City | : Lodz |
| | | | Posted by Jack on 08/05/2007 at 10:55:54
| | I always thought about a projection as a sort of flattening of a 3d image to 2d. So we have x,y,z and after projecting we obtain x`,y`. Now I have a look at your code and see something like that:
SMapPixelToFrame ShadowMapPixelShader(SMapVertexToPixel PSIn)
{
SMapPixelToFrame Output = (SMapPixelToFrame)0;
Output.Color = PSIn.Position2D.z/xMaxDepth;
return Output;
}
Position2D is the position which we obtain after tranforming the 3d position by a lightWorldViewProjection matrix. So how is it possible we still have a z coordinate and one that is alive and kicking?
Shouldn't we have a 2d image with 2d coordinates an that's it?
By the way fantastic job!
Thanks for the tremendous work.
I'll just assume for now that somehow this projecting keeps the real z coordinates, apparently it works in your shaders. | |
|
|
| |
| |
| Poster | : m_Maky | | Posts | : 67 | | Country | : france | | City | : Nice |
| | | | Posted by m_Maky on 08/05/2007 at 12:11:52
| | | Well you also need to know the depth when projecting, so that's why that coordinate is alive | |
|
|
| |
| |
| Poster | : Jack | | Posts | : 9 | | Country | : Poland | | City | : Lodz |
| | | | Posted by Jack on 08/05/2007 at 13:06:25
| | Yeah but you don't understand it's not as if I have a choice a projection matrix does what it does, it's math.
So i am a bit surprised to see that xna does this and has the z -coordinate after transformation. How is that? It's against my logic. Tell me if you draw a 3d cube on a piece of paper what are the z coords?
They are all zero because it's flat. That's what I think projection does, could someone explain how it is in xna? | |
|
|
| |
| |
| Poster | : riemer | | Posts | : 1388 | | Country | : Belgium | | City | : Antwerp |
| | | | Posted by riemer on 08/05/2007 at 15:49:41
| | Indeed, you could say when going to 2D, you don't need the 3rd coordinate anymore. This would be true in case you would be drawing an image in Paint or Photoshop.
But here, to construct the 2D image, XNA needs to keep track of the distance between each object and the camera (the near clipping plane, actually). This value is stored in the depth buffer, so XNA knows for each pixel in the 2D image at what distance the object is. So when XNA is asked to draw another object on a certain pixel, XNA checks if the new object is in front of the old object. The new object is drawn only if the new object is in front of the old one.
So that's how you should think of this 3rd coordinate: it's the value of the depth buffer. | |
|
|
| |
| |
| Poster | : Jack | | Posts | : 9 | | Country | : Poland | | City | : Lodz |
| | | | Posted by Jack on 08/05/2007 at 16:07:44
| | It's the z buffer value?
Thanks i get it now. This depth value is just in a buffer. I was just surprised by the code
Position2D.z :) it still is odd but clear :) | |
|
|
| |
| |
| Poster | : m_Maky | | Posts | : 67 | | Country | : france | | City | : Nice |
| | | | Posted by m_Maky on 09/05/2007 at 13:50:26
| | | it's not EXACTLY the z-buffer value, as this needs to be mapped between 1 and 0. It's more like the distance between camera and object, and from this you can find the value for in the zbuffer | |
|
|