|
最近我装了XP,替换了以前的WIN98系统,可是这给我带来了很大的问题,我发现我在WIN98下编写的OPENGL程序基本上都不能运行而且错误百出。虽然解决了部分问题但是还有一个让我摸不清头脑的问题就我想在一个图形上贴上纹理却贴不出。希望各位高手帮帮我!!!!
我是系统是XP;用的VC7.0; 项目是:WINDOWS 基本对话框;程序目的是在一个正方形内贴纹理图象,可是纹理根部没有贴上去不知道什么原因,程序编译没有错误。图片大小是一张256×256的图象
程序代码如下:
BOOL CtextureMFCDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将\“关于...\”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
PIXELFORMATDESCRIPTOR thispixel={sizeof(PIXELFORMATDESCRIPTOR),1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,0,0,0,0,0,0,0,0,
32,0,0,0,0,24,0,0,
0,0,0,0,0};
CClientDC thismap(this);
int su=ChoosePixelFormat(thismap,&thispixel);
SetPixelFormat(thismap,su,&thispixel);
/* */ MyHGLRC=wglCreateContext(thismap);
wglMakeCurrent(thismap,MyHGLRC);
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CtextureMFCDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC thismap(this);
FILE *filed = fopen("Bitmap.bmp","rb");
BITMAPFILEHEADER bithad;
BITMAPINFO bitin;
fread(&bithad,1,sizeof(BITMAPFILEHEADER),filed);
fread(&bitin,1,sizeof(BITMAPINFO),filed);
GLubyte *bitlink=new GLubyte[bitin.bmiHeader.biWidth*bitin.bmiHeader.biHeight];
fread(bitlink,1,bitin.bmiHeader.biWidth*bitin.bmiHeader.biHeight,filed);
wglMakeCurrent(thismap,MyHGLRC);
glViewport(0,0,250,250);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glMatrixMode(GL_PROJECTION);
gluPerspective(90.0,500.0/500.0,0.0,-200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1.0f,0.0f,0.0f);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glGenTextures(1, &texty[5]);
glTexImage2D(GL_TEXTURE_2D,0,3,bitin.bmiHeader.biWidth-1,bitin.bmiHeader.biHeight-1,0,GL_RGB ,GL_UNSIGNED_BYTE,&bitlink[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
fclose(filed);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_FLAT);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-1, 1, 0);
// Display the bottom left vertice
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-1, -1, 0);
// Display the bottom right vertice
glTexCoord2f(1.0f, 0.0f);
glVertex3f(1, -1, 0);
// Display the top right vertice
glTexCoord2f(1.0f, 1.0f);
glVertex3f(1, 1, 0);
glEnd();
glFlush();
SwapBuffers(thismap);
CDialog::OnLButtonDown(nFlags, point);
} |
|