summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2010-10-13 23:50:16 -0500
committerKamil Kaminski <kamilkss@gmail.com>2010-10-13 23:52:07 -0500
commit4836c389de45644b97a9e6769617921030301119 (patch)
tree39d5eadd19d26673c27bb3d45a4b39a594f2e345
parent87b0bdb5e61472d33f4987d92d60c12cc21a6fe6 (diff)
downloadGLPyramid-4836c389de45644b97a9e6769617921030301119.tar.gz
GLPyramid-4836c389de45644b97a9e6769617921030301119.tar.bz2
GLPyramid-4836c389de45644b97a9e6769617921030301119.zip
pyramid: moved code around
-rw-r--r--sdl/GL_todo.txt11
-rw-r--r--sdl/glframe.h10
-rw-r--r--sdl/gltools.c73
-rw-r--r--sdl/gltools.h3
-rw-r--r--sdl/math3d.h9
-rw-r--r--sdl/pyramid.c79
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();