diff options
Diffstat (limited to 'sdl/pyramid.c')
-rw-r--r-- | sdl/pyramid.c | 79 |
1 files changed, 9 insertions, 70 deletions
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(); |