add texture rotation
authorBrian <brian@nostromo.localnet.net>
Mon, 26 Feb 2007 00:24:40 +0000 (17:24 -0700)
committerBrian <brian@nostromo.localnet.net>
Mon, 26 Feb 2007 00:24:40 +0000 (17:24 -0700)
progs/glsl/CH11-toyball.vert.txt
progs/glsl/toyball.c

index 1aa7e9c..b7da3ac 100644 (file)
@@ -14,7 +14,11 @@ uniform vec4 BallCenter;   // ball center in modelling coordinates
 
 void main()
 { 
-    ECposition   = gl_ModelViewMatrix * gl_Vertex;
+//orig:    ECposition   = gl_ModelViewMatrix * gl_Vertex;
+
+    ECposition = gl_TextureMatrix[0] * gl_Vertex;
+    ECposition = gl_ModelViewMatrix * ECposition;
+
     ECballCenter = gl_ModelViewMatrix * BallCenter;
     gl_Position  = ftransform();
 }
index 2d3462f..cef52c0 100644 (file)
@@ -51,11 +51,22 @@ static struct uniform_info Uniforms[] = {
 };
 
 static GLint win = 0;
-
+static GLboolean Anim = GL_FALSE;
+static GLfloat TexRot = 0.0;
 static GLfloat xRot = 0.0f, yRot = 0.0f, zRot = 0.0f;
 
 
 static void
+Idle(void)
+{
+   TexRot += 2.0;
+   if (TexRot > 360.0)
+      TexRot -= 360.0;
+   glutPostRedisplay();
+}
+
+
+static void
 Redisplay(void)
 {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -65,6 +76,11 @@ Redisplay(void)
    glRotatef(yRot, 0.0f, 1.0f, 0.0f);
    glRotatef(zRot, 0.0f, 0.0f, 1.0f);
 
+   glMatrixMode(GL_TEXTURE);
+   glLoadIdentity();
+   glRotatef(TexRot, 0.0f, 1.0f, 0.0f);
+   glMatrixMode(GL_MODELVIEW);
+
    glutSolidSphere(2.0, 20, 10);
 
    glPopMatrix();
@@ -106,6 +122,13 @@ Key(unsigned char key, int x, int y)
   (void) y;
 
    switch(key) {
+   case 'a':
+      Anim = !Anim;
+      if (Anim)
+         glutIdleFunc(Idle);
+      else
+         glutIdleFunc(NULL);
+      break;
    case 'z':
       zRot += step;
       break;