The function you are talking about is: Matrix.CreateOrthographicOffCenter(left, right, bottom, top, zNearPlane, zFarPlane) .
This returns a projection matrix that can be used to transform a point in world space into a point in projection space.
The projected space goes from (-1, -1) in the lower left corner of the viewport to (1,1) in the upper right corner. This is the coordinate space on which the GPU operates during rasterization.
World space is what you want.
So, let's say you create a matrix with Matrix.CreateOrthographicOffCenter(0, 256, 240, 0, -10, 10) , and you used this matrix as a projection matrix using BasicEffect to draw a cube model. Let's say the cube model is centered at the origin and has a size of 1 (length, width and height).
Just like basicEffect.Projection , you must set basicEffect.View = Matrix.Identity (because we donโt want additional camera conversion) and basicEffect.World = Matrix.CreateTranslation(0.5f, 0.5f, 0) to translate your model, so that it exists from (0,0) to (1, 1) in world space. Then draw your model using this BasicEffect.
The top face of your cube (spelling means there is no perspective) will be drawn in the upper left corner of the viewport. It will occupy the 1 / 256th width and the 1 / 240th height of the viewport (see also GraphicsDevice.Viewport ).
(PS: I canโt remember how this kind of projection is dropped on the back side. If you donโt see anything, try turning it off or switching the winding order.)
Now that this is said, I get the point from your other questions (and the fact that you want to make a spelling matrix) that you want to do a 2D sprite. BasicEffect is primarily intended for 3D work (although if you create your own vertex shader, it is not recommended for sprites, you will need a projection matrix).
You probably want to use XNA SpriteBatch - not least because it is highly optimized for drawing sprites. SpriteBatch.Begin will take the Matrix transformMatrix as an argument. This is equivalent to the World and View matrix above, not the projection matrix.
SpriteBatch assumes that your world space is the same as client space (top left (0,0), width and height - viewport size) and handles the projection for you. (Itโs actually more advanced than this - it will apply the offset for you so that the sprite pixels match the pixels on the screen.)
If you want to draw sprites so that 256 units wide and 240 units appear in the viewport in the world, you can transfer such a matrix as SpriteBatch.Begin :
Matrix.CreateScale(viewport.Width / 256f, viewport.Height / 240f, 1f)
It is worth noting that in the new XNA 4.0 you can use SpriteBatch to draw using custom vertex shaders , and therefore you can use arbitrary world versions, projection matrixes of the project.