diff options
author | Kyle K <kylek389@gmail.com> | 2010-10-13 23:50:16 -0500 |
---|---|---|
committer | Kamil Kaminski <kamilkss@gmail.com> | 2010-10-13 23:52:07 -0500 |
commit | 4836c389de45644b97a9e6769617921030301119 (patch) | |
tree | 39d5eadd19d26673c27bb3d45a4b39a594f2e345 /sdl | |
parent | 87b0bdb5e61472d33f4987d92d60c12cc21a6fe6 (diff) | |
download | GLPyramid-4836c389de45644b97a9e6769617921030301119.tar.gz GLPyramid-4836c389de45644b97a9e6769617921030301119.tar.bz2 GLPyramid-4836c389de45644b97a9e6769617921030301119.zip |
pyramid: moved code around
Diffstat (limited to 'sdl')
-rw-r--r-- | sdl/GL_todo.txt | 11 | ||||
-rw-r--r-- | sdl/glframe.h | 10 | ||||
-rw-r--r-- | sdl/gltools.c | 73 | ||||
-rw-r--r-- | sdl/gltools.h | 3 | ||||
-rw-r--r-- | sdl/math3d.h | 9 | ||||
-rw-r--r-- | sdl/pyramid.c | 79 |
6 files changed, 103 insertions, 82 deletions
diff --git a/sdl/GL_todo.txt b/sdl/GL_todo.txt index 4466642..aea6032 100644 --- a/sdl/GL_todo.txt +++ b/sdl/GL_todo.txt @@ -11,3 +11,14 @@ todo: - obj loader - look at mesa's sources and borrow OSD stuff - GL error checking and extensions +- split SDL + +notes: +- texture matrix!? +- texture filtering: process of calculating color fragments from a stretched or + shrunken texture map + +obj loader: +- glGenTextures() +- glBindTextures() + diff --git a/sdl/glframe.h b/sdl/glframe.h index fa5c991..d83f9e4 100644 --- a/sdl/glframe.h +++ b/sdl/glframe.h @@ -11,11 +11,11 @@ typedef struct } GLFrame; /* function prototypes */ -void reset_glframe(GLFrame *frame); -void get_camera_orientation(GLFrame *frame, M3DMatrix44f m); -void apply_camera_transform(GLFrame *frame); -void move_forward(GLFrame *frame, float delta); -void rotate_local_y(GLFrame *frame, float angle); +void reset_glframe(GLFrame *); +void get_camera_orientation(GLFrame *, M3DMatrix44f); +void apply_camera_transform(GLFrame *); +void move_forward(GLFrame *, float); +void rotate_local_y(GLFrame *, float); #endif diff --git a/sdl/gltools.c b/sdl/gltools.c index 350f3db..d6c518f 100644 --- a/sdl/gltools.c +++ b/sdl/gltools.c @@ -164,6 +164,77 @@ GLbyte *gltLoadTGA(const char *szFileName, GLint *iWidth, GLint *iHeight, return pBits; } +void gltDrawTriangle(void) +{ + M3DVector3f vNormal; + M3DVector3f vCorners[5] = { + { 0.0f, 0.6f, 0.0f }, /* top 0 */ + { -0.5f, -0.2f, -.50f }, /* back left 1 */ + { 0.5f, -0.2f, -0.50f }, /* back right 2 */ + { 0.5f, -0.2f, 0.5f }, /* front right 3 */ + { -0.5f, -0.2f, 0.5f } /* front left 4 */ + }; + + glBegin(GL_TRIANGLES); + /* bottom section - two triangles */ + glNormal3f(0.0f, -1.0f, 0.0f); + + /* map texture to geometry */ + glTexCoord2f(1.0f, 1.0f); + glVertex3fv(vCorners[2]); + glTexCoord2f(0.0f, 1.0f); + glVertex3fv(vCorners[4]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[1]); + glTexCoord2f(1.0f, 1.0f); + glVertex3fv(vCorners[2]); + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(vCorners[3]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[4]); + + /* front face */ + m3dFindNormalf(vNormal, vCorners[0], vCorners[4], vCorners[3]); + glNormal3fv(vNormal); + glTexCoord2f(0.5f, 1.0f); + glVertex3fv(vCorners[0]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[4]); + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(vCorners[3]); + + /* left face */ + m3dFindNormalf(vNormal, vCorners[0], vCorners[1], vCorners[4]); + glNormal3fv(vNormal); + glTexCoord2f(0.5f, 1.0f); + glVertex3fv(vCorners[0]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[1]); + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(vCorners[4]); + + /* back face */ + m3dFindNormalf(vNormal, vCorners[0], vCorners[2], vCorners[1]); + glNormal3fv(vNormal); + glTexCoord2f(0.5f, 1.0f); + glVertex3fv(vCorners[0]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[2]); + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(vCorners[1]); + + /* right face */ + m3dFindNormalf(vNormal, vCorners[0], vCorners[3], vCorners[2]); + glNormal3fv(vNormal); + glTexCoord2f(0.5f, 1.0f); + glVertex3fv(vCorners[0]); + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(vCorners[3]); + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(vCorners[2]); + glEnd(); +} + void gltDrawUnitAxes(void) { GLUquadricObj *pObj; /* temporary, used for quadrics */ @@ -276,7 +347,7 @@ void gltDrawTorus(GLfloat majorRadius, GLfloat minorRadius, GLint numMajor, /* this function just specifically draws the jet */ /* FIXME: needs to accepts parameters of location and lightning */ -void DrawJet(int nShadow) +void gltDrawJet(int nShadow) { M3DVector3f vNormal; diff --git a/sdl/gltools.h b/sdl/gltools.h index b960abd..9d5b819 100644 --- a/sdl/gltools.h +++ b/sdl/gltools.h @@ -24,9 +24,10 @@ typedef struct /* function prototypes */ GLint gltWriteTGA(const char *); GLbyte *gltLoadTGA(const char *, GLint *, GLint *, GLint *, GLenum *); +void gltDrawTriangle(void); void gltDrawUnitAxes(void); void gltDrawTorus(GLfloat, GLfloat, GLint, GLint); -void DrawJet(int); +void gltDrawJet(int); #endif diff --git a/sdl/math3d.h b/sdl/math3d.h index 510c017..c337195 100644 --- a/sdl/math3d.h +++ b/sdl/math3d.h @@ -24,13 +24,12 @@ typedef float M3DVector2f[2]; /* vector of 2 floats */ /* math function prototypes */ void m3dFindNormalf(M3DVector3f, const M3DVector3f, const M3DVector3f, const M3DVector3f); -void m3dLoadIdentity33f(M3DMatrix33f m); +void m3dLoadIdentity33f(M3DMatrix33f); void m3dLoadIdentity44f(M3DMatrix44f); -void m3dGetPlaneEquationf(M3DVector4f planeEq, const M3DVector3f p1, - const M3DVector3f p2, const M3DVector3f p3); +void m3dGetPlaneEquationf(M3DVector4f, const M3DVector3f, + const M3DVector3f, const M3DVector3f); void m3dRotationMatrix44f(M3DMatrix44f, float, float, float, float); -void m3dMakePlanarShadowMatrixf(M3DMatrix44f proj, const M3DVector4f planeEq, - const M3DVector3f vLightPos); +void m3dMakePlanarShadowMatrixf(M3DMatrix44f, const M3DVector4f, const M3DVector3f); void m3dMatrixMultiply44f(M3DMatrix44f, const M3DMatrix44f, const M3DMatrix44f); static inline void m3dCrossProductf(M3DVector3f result, const M3DVector3f u, diff --git a/sdl/pyramid.c b/sdl/pyramid.c index fa78477..fded7c5 100644 --- a/sdl/pyramid.c +++ b/sdl/pyramid.c @@ -108,12 +108,18 @@ static void SetupRC() GL_UNSIGNED_BYTE, pBytes); free(pBytes); + /* texture filtering, we modify deafult values since we don't have mipmaps */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + /* how OpenGL combines the colors from texels with the color of the underlying + * geometry is controlled by the texture environment mode */ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + /* once texture is loaded and enabled, it will applied to every primitive + * that specifies coordinates */ glEnable(GL_TEXTURE_2D); /* set the camera to <0,0,0> */ @@ -241,16 +247,7 @@ static void draw_ground(void) } static void render(void) -{ - M3DVector3f vNormal; - M3DVector3f vCorners[5] = { - { 0.0f, 0.6f, 0.0f }, /* top 0 */ - { -0.5f, -0.2f, -.50f }, /* back left 1 */ - { 0.5f, -0.2f, -0.50f }, /* back right 2 */ - { 0.5f, -0.2f, 0.5f }, /* front right 3 */ - { -0.5f, -0.2f, 0.5f } /* front left 4 */ - }; - +{ /* clear the window with current clearing color */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -267,66 +264,8 @@ static void render(void) glRotatef(yRot, 0.0f, 1.0f, 0.0f); /* draw the pyramid */ - glColor3f(1.0f, 1.0f, 1.0f); - glBegin(GL_TRIANGLES); - - /* bottom section - two triangles */ - glNormal3f(0.0f, -1.0f, 0.0f); - - /* map texture to geometry */ - glTexCoord2f(1.0f, 1.0f); - glVertex3fv(vCorners[2]); - glTexCoord2f(0.0f, 1.0f); - glVertex3fv(vCorners[4]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[1]); - glTexCoord2f(1.0f, 1.0f); - glVertex3fv(vCorners[2]); - glTexCoord2f(1.0f, 0.0f); - glVertex3fv(vCorners[3]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[4]); - - /* front face */ - m3dFindNormalf(vNormal, vCorners[0], vCorners[4], vCorners[3]); - glNormal3fv(vNormal); - glTexCoord2f(0.5f, 1.0f); - glVertex3fv(vCorners[0]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[4]); - glTexCoord2f(1.0f, 0.0f); - glVertex3fv(vCorners[3]); - - /* left face */ - m3dFindNormalf(vNormal, vCorners[0], vCorners[1], vCorners[4]); - glNormal3fv(vNormal); - glTexCoord2f(0.5f, 1.0f); - glVertex3fv(vCorners[0]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[1]); - glTexCoord2f(1.0f, 0.0f); - glVertex3fv(vCorners[4]); - - /* back face */ - m3dFindNormalf(vNormal, vCorners[0], vCorners[2], vCorners[1]); - glNormal3fv(vNormal); - glTexCoord2f(0.5f, 1.0f); - glVertex3fv(vCorners[0]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[2]); - glTexCoord2f(1.0f, 0.0f); - glVertex3fv(vCorners[1]); - - /* right face */ - m3dFindNormalf(vNormal, vCorners[0], vCorners[3], vCorners[2]); - glNormal3fv(vNormal); - glTexCoord2f(0.5f, 1.0f); - glVertex3fv(vCorners[0]); - glTexCoord2f(0.0f, 0.0f); - glVertex3fv(vCorners[3]); - glTexCoord2f(1.0f, 0.0f); - glVertex3fv(vCorners[2]); - glEnd(); + glColor3f(1.0f, 1.0f, 1.0f); + gltDrawTriangle(); /* restore the matrix state */ glPopMatrix(); |