Reputation: 770
I am trying to understand the basic concepts around the co-ordinates system in OpenGL so I have been making a test application from guides online.
Presently I have drawn a simple Square to the screen, using simple Co-ordinates of:
-1.0f, 1.0f, 0.0f, // 0, Top Left
-1.0f, -1.0f, 0.0f, // 1, Bottom Left
1.0f, -1.0f, 0.0f, // 2, Bottom Right
1.0f, 1.0f, 0.0f, // 3, Top Right
In my application I run the following code:
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
My basic understanding here is that the code is setting the viewing port angle to 45 degrees and the width to height ratio of the window size.
Another thing I am doing is setting the viewing position as -4 units on the Z axis:gl.glTranslatef(0, 0, -4);
This is what the result looks like in Landscape...
And in Portrait...
My questions are:
How does the co-ordinate system work, how many Pixels does one unit represent? How does changing the orientation and width to height ratio effect the equation?
If I wanted to draw a square the size of the screen, with a View Port of 45 degrees and a Viewing position of z-4... how does one figure out the required width and height in units?
Upvotes: 1
Views: 1081
Reputation: 8431
I'll try to answer the best I can.
There wouldn't be any reason to change the width to height ratio or 45 degree angle. Doing it the way you have it keeps the things from being stretched horizontally or vertically in an unusual way. Because you are using a perspective view, you have 3D space with depth as apposed to an Orthographic view where there is no depth. In doing glTranslatef(0,0,-4) what you've actually done is changed the MODELVIEW Matix, moving it 4 in the negative z direction, presumably before actually drawing the square. By default, the "camera" is sitting at 0,0,0 with Y (up) as the upward direction.
You may be able to translate 3D space to pixels, but with a Perspective view type, I'm not at all sure you'd really want or need to. A 2D Orthographic view would be a different story, though, as many people use OpenGL for 2D games as well. Wanting a square exactly the size of the screen, Orthographic is probably the way to go, and you should be able to with a few Google searches be able to figure out your pixel density to 2d space comparison.
Upvotes: 2