600高分求助,用OpenGL作的多文档源程序,要求有旋转位图功能,并且读取的位图贴在视图中,小弟我很久都没解决这个问题,高人请进

解决方案 »

  1.   

    int LoadGLTextures();
    AUX_RGBImageRec * LoadBMP(LPCTSTR Filename);
    GLfloat xrot,yrot,zrot;//x,y,z轴的旋转角度
    GLuint texture[1];//用于存储纹理AUX_RGBImageRec * LoadBMP(LPCTSTR Filename)
    {
    FILE *File=NULL;
    if (!Filename)
    {
    return NULL;
    }
    File = fopen(Filename,"r");
    if(File)
    {
    fclose(File);
    return auxDIBImageLoad(Filename);
    }
    return NULL;
    }int LoadGLTextures()
    { int status = FALSE;
    AUX_RGBImageRec *TextureImage[1]; 
    memset(TextureImage,0,sizeof(void *)*1); 
    CString str ;//bitmap file name
    if (TextureImage[0]=LoadBMP(str))
    {
    status = TRUE;
    glGenTextures(1, &texture[0]);
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, 
    TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // 线形滤波
    }
    if (TextureImage[0]) // 纹理是否存在
    {
    if (TextureImage[0]->data) // 纹理图像是否存在
    {
    free(TextureImage[0]->data); // 释放纹理图像占用的内存
    }

    free(TextureImage[0]); // 释放图像结构
    }
    return status;
    }
    void OnDraw()
    {
             glLoadIdentity(); 

    glTranslatef(0.0f,0.0f,z_depth); 

    glRotatef(xrot,1.0f,0.0f,0.0f); // 绕X轴旋转
    glRotatef(yrot,0.0f,1.0f,0.0f); // 绕Y轴旋转
    glRotatef(zrot,0.0f,0.0f,1.0f); // 绕Z轴旋转

    draw_frame();

    GLfloat coor = 0.0;
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glBegin(GL_QUADS);
    // 前面
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.5f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.5f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.5f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.5f); // 纹理和四边形的左上
    glEnd();
    }
    若要旋转你必须在别处修改x,y,z轴的旋转变量.
    虽然OpenGL提供了丰富的图形程序设计函数,可是掌握它并不是很容易,尤其是OpenGL并不是针对Windows的,因此无论什么时候需要创建一个新的OpenGL程序,你都必须在缓冲区创建一个基本的OpenGL视类,你需要考虑一个又一个细节,如初始化PIXELFORMATDESCRIPTOR结构\设置像素结构\和创建图形操作描述表等等。
      

  2.   

    我的源程序功能很多,太长,OpenGL只是其中一个功能,帖出来很烦琐又需要修改,所以先帖这么多,如果有什么别的需要,我再帖就是了.
      

  3.   

    看看这个例子吧:
    http://www.vckbase.com/document/viewdoc.asp?id=462