Setup camera for 1:1 pixelmapping

Started by
6 comments, last by someusername 18 years ago
I'm trying to setup camera with perspective projection so that I get 1:1 mapping of an quad to pixels. I got this 320x256 sized quad with texture that I want to be rendered in 320x256 pixels on screen I can't get it to work 100%, either the width is correct or the height. Cant get both to match which is a bit annoying. Anyone know how to do this? [Edited by - devnick on March 28, 2006 5:31:13 AM]
Advertisement
What graphics API are you using?
DirectX
Hey,

Well the first thing to do is look up in the SDK for the FVF formats you can use. Look up one called D3DFVF_XYZRHW. This means you add one float after the z component and if you set that to one, the vertices will not be transformed, they will map exactly how you want.

Hope that helps,

Dave
I still want the vertices to be transformed as usual but at z=1 I want it (in this case a quad) to apear to be in screenspace, ie 1:1 mapping. So it's a question of setting up the camera and projection matrix correct.

Thanks anyway.
If this is just for a background, or something, you could render it all the the back buffer and render everything else in front of it.

Dave
The thing I want to do is rendering it as with orthogonal projection but a want to be able to rotate it with perspective.
Hmm. I can suggest something but I haven't tried it. It should work though...
What you must do, is set the width and height of the visible volume at the camera's near clipping plane to the width and height of your quad, and then make sure that the distance from the camera to the quad is exactly equal to the distance of the near clipping plane.
To sum up, set the projection matrix to:
[ 320.f   0         0         0 ][   0   256.f       0         0 ][   0     0     z2/(z2-z1)    1 ][   0     0   -z1*z2/(z2-z1)  0 ]

where z1 is the near clippling distance and z2 is the far one.
You can use one of the D3DXMatrixPerspectiveFovLH/RH for this.

Then set the view matrix so that the camera's "look at" axis is perpendicular to the quad, and intersects the quad at its center.
E.g. if the quad is parallel to the XY plane, and its center is (0,0,0), set the camera target to (0,0,0) and its position to (0,0,-z1).
Avoid forcing the camera to look straight down (or up), because there is a bug in that case.

If nothing seems to render, it could be a "z-fighting" problem. Position the camera at (0,0,-(z1+ε)), where ε is some very small positive number, like 0.001f
Of course, the viewport's dimension should also be 320 and 256 respectively.
As I said, I've never done this, but it *should* work.

This topic is closed to new replies.

Advertisement