600高分求助,用OpenGL作的多文档源程序,要求有旋转位图功能,并且读取的位图贴在视图中,小弟我很久都没解决这个问题,高人请进 600高分求助,用OpenGL作的多文档源程序,要求有旋转位图功能,并且读取的位图贴在视图中,小弟我很久都没解决这个问题,高人请进 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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结构\设置像素结构\和创建图形操作描述表等等。 我的源程序功能很多,太长,OpenGL只是其中一个功能,帖出来很烦琐又需要修改,所以先帖这么多,如果有什么别的需要,我再帖就是了. 看看这个例子吧:http://www.vckbase.com/document/viewdoc.asp?id=462 如何设置异常处理 导入数据库问题 CAsyncSocket有关编程问题? 怎么在MDI的一个子窗口中新建另一个子窗口 如何使一个编辑框失去焦点的时候促发消息 用WriteProcessMemory写内存时,内存不可读 "An unsupported operation was attempted" 如何将Ctrl+A 字符转化成 GetHotKey中的2个参数呢 急,大家有没有做过这样的组件:实现和web交互的组件?? 如何将view改成桌面? ATL类库结构 如何得到CListCtrl中指定行的属性 关于添加Splash工程的问题?
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结构\设置像素结构\和创建图形操作描述表等等。
http://www.vckbase.com/document/viewdoc.asp?id=462