我画的是一个房子   房子的墙、地板、天花板用了3中不同的图片来纹理贴图   纹理用的是多重纹理   在程序中没有使用颜色   可是图像贴在物体上后   图片的颜色改变了   不知道是怎么回事  下面的是代码/////////////////////////////////////////////////////////////////////////////
// CRoomView drawingvoid CRoomView::OnDraw(CDC* pDC)
{
CRoomDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//启用双缓存
//双缓存应用
static BOOL     bBusy = FALSE;
    if(bBusy)  return;
    bBusy = TRUE;
//设置背景色
/* glClearColor(0.2f,0.2f,0.5f,1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除缓存,将背景置空
glMatrixMode(GL_MODELVIEW);//启动模型矩阵
glLoadIdentity();//初始化矩阵*/
mydraw(); 
glFinish();
//双缓存的应用
SwapBuffers(wglGetCurrentDC());
bBusy = FALSE;
}
void CRoomView::mydraw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
    glLoadIdentity(); // 重置当前的模型观察矩阵
mypoint();
}void CRoomView::OnSize(UINT nType, int cx, int cy) 
{
CView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if(cy > 0)
    {         my_oldRect.right = cx;
        my_oldRect.bottom = cy;
        glMatrixMode(GL_PROJECTION);//启用透视矩阵
        glLoadIdentity();//初始化
//视场调节:
glFrustum(-1.0,1.0,-1.0*cy/cx,1.0*cy/cx,0.5,25.0);//定义空间范围
glViewport(0, 0, cx, cy);//定义显示范围
}
RedrawWindow();//显示更新
}
void CRoomView::Texture()
{
//载入纹理
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(3,texture);
for(int i=0;i<3;i++)
{
//绑定纹理对象
glBindTexture(GL_TEXTURE_2D,texture[i]);
//载入纹理,设定过滤器和环绕模式
image=makeimage(text[i]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 64,64, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
//设置过滤器
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//设置环绕模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
//设置纹理环境模式

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
delete image;
}
}char * CRoomView::makeimage(char *str)
{
   FILE *fp;
   char *temp=new char[64*64*3+1];
   fp=fopen(str,"rb");
   if(fp!=0)
   {
      fseek(fp,54,SEEK_SET);
  fread(temp,sizeof(char),64*64*3,fp);
   } 
   return temp;
}void CRoomView::buttom(int i, int j)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texture[2]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
  glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z);
glTexCoord2f(0.0f,1.0f);
  glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z);
glTexCoord2f(1.0f,1.0f);
  glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z);
glTexCoord2f(1.0f,0.0f);
  glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z);
  glEnd();
glDisable(GL_TEXTURE_2D);
}
void CRoomView::drawwall(int i, int j)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texture[1]);
glBegin(GL_QUADS);
//四面体的顶部
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z+0.9);
glTexCoord2f(0.0f,1.0f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z+0.9);
glTexCoord2f(1.0f,1.0f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z+0.9);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z+0.9);
//四面体的四周
//平面一
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z);
glTexCoord2f(0.0f,22.5f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z+0.9);
glTexCoord2f(1.0f,22.5f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z+0.9);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z);
//平面二
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z);
glTexCoord2f(0.0f,22.5f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z+0.9);
glTexCoord2f(1.0f,22.5f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z+0.9);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z);
//平面三
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z);
glTexCoord2f(0.0f,22.5f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z+0.9);
glTexCoord2f(1.0f,22.5f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z+0.9);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z);
//平面四
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z);
glTexCoord2f(0.0f,22.5f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z+0.9);
glTexCoord2f(1.0f,22.5f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z+0.9);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z);
//四面体的底部
glTexCoord2f(0.0f,0.0f);
glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z);
glTexCoord2f(0.0f,1.0f);
glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z);
glTexCoord2f(1.0f,1.0f);
glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z);
glTexCoord2f(1.0f,0.0f);
glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z);
glEnd();
glDisable(GL_TEXTURE_2D) ;}void CRoomView::top(int i, int j)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texture[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
  glVertex3f(plane[i][j].vertex1.x,plane[i][j].vertex1.y,plane[i][j].vertex1.z+0.9);
glTexCoord2f(0.0f,1.0f);
  glVertex3f(plane[i][j].vertex4.x,plane[i][j].vertex4.y,plane[i][j].vertex4.z+0.9);
glTexCoord2f(1.0f,1.0f);
  glVertex3f(plane[i][j].vertex3.x,plane[i][j].vertex3.y,plane[i][j].vertex3.z+0.9);
glTexCoord2f(1.0f,0.0f);
  glVertex3f(plane[i][j].vertex2.x,plane[i][j].vertex2.y,plane[i][j].vertex2.z+0.9);
glEnd();
glDisable(GL_TEXTURE_2D) ;
}void CRoomView::mypoint()
{


glRotated(rangx,1.0,0.0,0.0);
glRotated(rangy,0.0,1.0,0.0);
glRotated(rangz,0.0,0.0,1.0);
glPushMatrix();
glTranslatef(-0.5,-0.5,0.5);
glRotated(180,1,0,0);
// glScalef(2.0,2.0,2.0);
//画墙
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for(int i=1;i<26;i++)
{
for(int j=1;j<26;j++)
{
if(maze[i][j]=='1')
drawwall(i,j);
else if(maze[i][j]!='2')
{
top(i,j);
buttom(i,j);
}
}
}
glPopMatrix();
}