summaryrefslogtreecommitdiffstats
path: root/sdl/pyramid.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdl/pyramid.c')
-rw-r--r--sdl/pyramid.c79
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();