openGL贴图显示纹理的标准流程是什么?
WYHVC 2010-04-06 09:30:40 我有个贴图显示纹理图像的openglGL程序,在一台式机(HP Compaq dc7600,xp系统)上运行显示没有问题,考到一台联想(7663MS3,windows7系统)上怎么就一点不显示呢?应该不是硬件的问题,因为我从别人那里考的一个opengl的exe能够显示纹理。
我猜想是不是我的程序不规范?
我写一下我的程序流程,请高手帮我查一查:
1.OnCreate()中:
if(hglrc==NULL)
{
PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,//32位颜色深度
0,0,0,0,0,0,
1,//alpha
0,
0,//
0,0,0,0,
32,//32位z缓存
0,
0,
PFD_MAIN_PLANE,
0,0,0,0
};
CClientDC clientdc(this);
this->GetClientRect(&m_ClientRect);//窗口大小
int cpf=ChoosePixelFormat(clientdc.m_hDC,&pfd);
SetPixelFormat(clientdc.m_hDC,cpf,&pfd);
hglrc=wglCreateContext(clientdc.m_hDC);
}
2.OnSize()中:
GLsizei w=m_ClientRect.Width();
GLsizei h=m_ClientRect.Height();
if(!h)
return;
CClientDC clientDC(this);
wglMakeCurrent(clientDC.m_hDC,hglrc);
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,1.0f,50.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
3.init()函数:
glGenTextures(1,&intexture[0]);
glBindTexture(GL_TEXTURE_2D,intexture[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D,4, g_imgbmpWidth2,g_imgbmpHeight2,GL_RGBA,GL_UNSIGNED_BYTE,symbol);
glGenTextures(1,&intexture[1]);
glBindTexture(GL_TEXTURE_2D,intexture[1]);
gluBuild2DMipmaps(GL_TEXTURE_2D,4, g_terbmpWidth1,g_terbmpHeight1,GL_RGBA,GL_UNSIGNED_BYTE,m_symbol);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE,GL_DECAL);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glEnable(GL_BLEND);//
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//
4.OnDraw()函数中:
glClearColor(float(m_Bred)/255.0f,float(m_Bgreen)/255.0f,float(m_Bblue)/255.0f,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glTexEnvf(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE,GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,intexture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glEnable(GL_LINE_SMOOTH);//反走样
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//alpha模式下反走样
//glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);//20100322无效果
glShadeModel(GL_SMOOTH);
glPushMatrix();
glTranslatef(m_fMoveX,m_fMoveY,-3.5);
glRotatef(m_fAngleX,1.0,0.0,0.0);
glRotatef(m_fAngleY,0.0,1.0,0.0);
glRotatef(m_fAngleZ,0.0,0.0,1.0);
glScalef(m_fGlobalScale,m_fGlobalScale,m_fGlobalScale);//缩放
if(g_imgbmpWidth2>0 && g_imgbmpHeight2>0)
drawPic();//画纹理1
if(g_terbmpWidth1>0 && g_terbmpHeight1>0)
{
glBindTexture(GL_TEXTURE_2D,intexture[1]);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,g_terbmpWidth1,g_terbmpHeight1,GL_RGBA,GL_UNSIGNED_BYTE,m_symbol);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat light_position[]={0.0f,6.0f,5.5f,0.0f};
GLfloat light_ambient[]={1.0f,1.0f,1.0f,0.0f};
GLfloat mat_env[]={0.75f,0.75f,0.75f,0.0f};
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_env);
draw(); //画纹理2
glDisable(GL_LIGHTING);
}
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glPopMatrix();
glFlush();
SwapBuffers(pdc->m_hDC);
一共4个地方,我按顺序写的,请帮我看看哪里有问题,恳请帮我指出来,谢谢!