我修改了一下程序,可是运行后就看不到物体了float heading=0.0, lookupdown=0.0;
float beginX, beginY, currentX, currentY;
GLfloat yrot;
typedef struct {
  GLubyte *p;
  unsigned int height;
  unsigned int width;
} IMGREC;
struct matrix{
float x;
float y;
float z;
} Position;IMGREC *image[2];typedef struct {
char id[2];
long int filesize;
long int reserved;
long int headersize;
long int infoSize;
long int width;
long int depth;
short int biPlanes;
   short int bits;
char biCompression;
long int biSizeImage;
long int biXPelsPerMeter;
long int biYPelsPerMeter;
long int biClrUsed;
long int biClrImportant;
} BMPREC;void loadbmp(char *name,IMGREC *img)
{
    FILE *fp;
    BMPREC data;
    int psize;
    int i;
    GLubyte temp;
    if ((fp=fopen(name,"rb"))==NULL)
    {
       printf("Can't open file.\n");
       exit(-1);
    }   
    fread(&(data.id[0]),sizeof(char),1,fp);
    fread(&(data.id[1]),sizeof(char),1,fp);
    fread(&(data.filesize),sizeof(long int),1,fp);
    fread(&(data.reserved),sizeof(long int),1,fp);
    fread(&(data.headersize),sizeof(long int),1,fp);
    fread(&(data.infoSize),sizeof(long int),1,fp);
    fread(&(data.width),sizeof(long int),1,fp);
    fread(&(data.depth),sizeof(long int),1,fp);
    fread(&(data.biPlanes),sizeof(short int),1,fp);
    fread(&(data.bits),sizeof(short int),1,fp);
    fread(&(data.biCompression),sizeof(char),1,fp);
    fread(&(data.biSizeImage),sizeof(long int),1,fp);
    fread(&(data.biXPelsPerMeter),sizeof(long int),1,fp);
    fread(&(data.biYPelsPerMeter),sizeof(long int),1,fp);
    fread(&(data.biClrUsed),sizeof(long int),1,fp);
 fread(&(data.biClrImportant),sizeof(long int),1,fp);
    if (!((toupper(data.id[0])=='B')&&(toupper(data.id[1])=='M')))
    {
       printf("File isn't a bitmap file.\n");
       exit(-1);
    }
    if (data.biCompression!=0)
    {
       printf("Can't support compress bitmap file.\n");
       exit(-1);
    }
    if (data.bits != 24)
    {
       printf("data.bits = %d\n",data.bits);
       printf("Require only 24 bit bitmap file.\n");
       exit(-1);
    }
    psize=data.depth*data.width*3 ;
    if ( (img->p=(GLubyte *)malloc(psize)) == NULL)
    {
       printf("Out of memory.\n");
       exit(-1);
    }
    fread( img->p, sizeof(GLubyte), psize,fp);
    for(i=0;i<psize;i+=3)
    {
       // bgr --> rgb
       temp = img->p[i];
       img->p[i] = img->p[i+2];
       img->p[i+2] = temp;
    };
    img->width=data.width;
    img->height=data.depth;
    fclose(fp);
}
void mouse(int button, int state, int x, int y){
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){
beginX=x;
beginY=y; }
//reset current x and y values
if(button==GLUT_LEFT_BUTTON && state==GLUT_UP){
currentX=currentX+x-beginX;
currentY=currentY+y-beginY; }
}
void mousemotion(int x, int y){
//currentX + (beginX-x) - direction faced in X
heading = -(x-beginX+currentX)*0.5f;
//currentY + (y-beginY) - direction faced in Y
lookupdown = (y-beginY+currentY)*0.5f;
//rotation about y axis yrot = heading;
}
void init ( void )
{
Position.x=0.0; //initial camera x pos
Position.y=0.0; //height of person
Position.z=-8.0;
  GLfloat glfLightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f };
  GLfloat glfLightDiffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };
  GLfloat glfLightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_CULL_FACE);
  glLightfv(GL_LIGHT0, GL_AMBIENT, glfLightAmbient);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, glfLightDiffuse);
  glLightfv(GL_LIGHT0, GL_SPECULAR,glfLightSpecular);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  if((image[0] = (IMGREC *)malloc(sizeof(IMGREC))) == NULL)
  {
     printf("Out of memory.\n");
     exit(-1);
  }
  loadbmp("wood.bmp",image[0]);
  glBindTexture(GL_TEXTURE_2D, 0); // bind this texture to id = 0
  // set paremeters for this 
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
}void  drawCube()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);  // enable texture
   // use wood texture 
glTexImage2D(GL_TEXTURE_2D, 0, 3, image[0]->width, image[0]->height,0, GL_RGB, GL_UNSIGNED_BYTE, image[0]->p );
  glBegin(GL_POLYGON);
    glNormal3f(0.0, 0.0, 1.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(-1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(-1.0, -1.0, 1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(1.0, -1.0, 1.0);
  glEnd();  glBegin(GL_POLYGON);
    glNormal3f(0.0, 0.0, -1.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(1.0, 1.0, -1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(1.0, -1.0, -1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(-1.0, -1.0, -1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(-1.0, 1.0, -1.0);
  glEnd();  glBegin(GL_POLYGON);
    glNormal3f(-1.0, 0.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(-1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(-1.0, 1.0, -1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(-1.0, -1.0, -1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(-1.0, -1.0, 1.0);
  glEnd();  glBegin(GL_POLYGON);
    glNormal3f(1.0, 0.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(1.0, -1.0, 1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(1.0, -1.0, -1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(1.0, 1.0, -1.0);
  glEnd();  glBegin(GL_POLYGON);
    glNormal3f(0.0, 1.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(-1.0, 1.0, -1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(-1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(1.0, 1.0, 1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(1.0, 1.0, -1.0);
  glEnd();  glBegin(GL_POLYGON);
    glNormal3f(0.0, -1.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(-1.0, -1.0, -1.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(1.0, -1.0, -1.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(1.0, -1.0, 1.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(-1.0, -1.0, 1.0);
  glEnd();
}void display ( void )
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
GLfloat xtrans = -Position.x;
GLfloat ztrans = -Position.z;
GLfloat ytrans = -Position.y;
GLfloat sceneroty = 360.0f - yrot;
glRotatef(lookupdown,1.0f,0,0);
glRotatef(sceneroty,0,1.0f,0);
glTranslatef(xtrans, ytrans, ztrans); //move objects based on player movement  drawCube();
  glFlush();
  glutSwapBuffers();
}void reshape(int width, int height)
{
     GLdouble gldAspect;
     gldAspect = width / height;
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(30.0,
                    gldAspect,
                    1.0,
                    10.0);
     glViewport(0, 0, width, height);
}void keyboard ( unsigned char key, int x, int y )
{
   switch ( key ) {     
      case 'f':
         glutFullScreen ( );
         break;
      case 'w':
         glutReshapeWindow ( 250,250 );
         break;
      default:
         break;
   }
}void idle_func()
{
glutPostRedisplay();
}int main ( int argc, char** argv )
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
   glutInitWindowSize(250, 250);
   glutCreateWindow(argv[0]);
   init();
   glutMouseFunc(mouse);
   glutMotionFunc(mousemotion);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutDisplayFunc(display);
   glutIdleFunc(idle_func);
   glutMainLoop();
   return 0;
}