Hiram

04-14-2011, 04:43 AM

Hi guys,

An assignment I'm doing requires that we implement our own matrice and vector classes, etc so we can draw in software mode (using SDL, if it's relevant), using everything in OpenGL as a base and implementing it ourselves.

I'm almost finished, but the last part of the assignment deals with frustums and has me stumped. Here's the instructions:

6.2.3 Projection Transformation

There are two parts to this. First, we transform the polygon into the clip coordinates

with a perspective frustum. This page has a good picture:

http://www.songho.ca/opengl/gl_projectionmatrix.html#perspective

Once we have the frustum, we normalise so that X, Y, and Z all range from -1 to 1, which

is called the Normalised Device Coordinates (NDC).

The two steps:

1. Apply Perspective transform to each of the vertices in the triangle

2. Divide x, y, and z by the w value of the vector.

To me, this implies that we should be constructing our frustum and transforming the polygon into the clip coords every frame, which I'm sure isn't correct, as I'm lead to believe that frustums are constructed in the projection matrix at the very beginning of your program and aren't altered. I'm confused because we also have to construct our own perspective matrix, so the two are supposed to somehow co-exist.

So here's the gist of what I think I'm supposed to be doing (according to the instructions)

initialisation (called once):

matrix mode to projection

load identity matrix

glMultMatrix perspective matrix (equilavent to gluPerspective)

matrix mode to model view

load identity

glMultMatrix look at

render (called repeatedly):

matrix mode to model view

glpushmatrix

transformations (translations, rotations, etc.) on an Object

glpopmatrix

matrix mode to projection

glpushmatrix

glMultMatrix frustum (of my own creation)

normalise x, y and z of Object using frustum

map the Object's x and y coords to the pixels (0 - width, 0 - height)

glpopmatrix

But I'm really not sure about this because as I said, I don't think it's good practice to change the mode to the projection matrix every time rendering occurs. I know I'm asking a lot here but I'm really unsure, so if you guys could at least tell me if I'm going wrong and where, that would be awesome.

Thanks heaps.

An assignment I'm doing requires that we implement our own matrice and vector classes, etc so we can draw in software mode (using SDL, if it's relevant), using everything in OpenGL as a base and implementing it ourselves.

I'm almost finished, but the last part of the assignment deals with frustums and has me stumped. Here's the instructions:

6.2.3 Projection Transformation

There are two parts to this. First, we transform the polygon into the clip coordinates

with a perspective frustum. This page has a good picture:

http://www.songho.ca/opengl/gl_projectionmatrix.html#perspective

Once we have the frustum, we normalise so that X, Y, and Z all range from -1 to 1, which

is called the Normalised Device Coordinates (NDC).

The two steps:

1. Apply Perspective transform to each of the vertices in the triangle

2. Divide x, y, and z by the w value of the vector.

To me, this implies that we should be constructing our frustum and transforming the polygon into the clip coords every frame, which I'm sure isn't correct, as I'm lead to believe that frustums are constructed in the projection matrix at the very beginning of your program and aren't altered. I'm confused because we also have to construct our own perspective matrix, so the two are supposed to somehow co-exist.

So here's the gist of what I think I'm supposed to be doing (according to the instructions)

initialisation (called once):

matrix mode to projection

load identity matrix

glMultMatrix perspective matrix (equilavent to gluPerspective)

matrix mode to model view

load identity

glMultMatrix look at

render (called repeatedly):

matrix mode to model view

glpushmatrix

transformations (translations, rotations, etc.) on an Object

glpopmatrix

matrix mode to projection

glpushmatrix

glMultMatrix frustum (of my own creation)

normalise x, y and z of Object using frustum

map the Object's x and y coords to the pixels (0 - width, 0 - height)

glpopmatrix

But I'm really not sure about this because as I said, I don't think it's good practice to change the mode to the projection matrix every time rendering occurs. I know I'm asking a lot here but I'm really unsure, so if you guys could at least tell me if I'm going wrong and where, that would be awesome.

Thanks heaps.