在opengl窗口中贴一张图片 bmp格式
我现在要在opengl窗口上贴一张简单图片,就是直接贴在窗口上就行了,图片要适应窗口大小,直接告诉我怎么往上画就可以了,我画上去现在是白的,还有告诉我怎么适应窗口大小。我...
我现在要在opengl 窗口上贴一张简单图片,就是直接贴在窗口上就行了,图片要适应窗口大小,直接告诉我怎么往上画就可以了,我画上去现在是白的,还有告诉我怎么适应窗口大小。
我现在要做的是把视频数据解码出来的图片放到窗口里,现在图片已经贴上了,但是还有两个问题:
1.我的图片要不断刷新,用这个glFlush();?? 怎么用?
2.我贴图用的这个:glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );但是它图片宽高都要是2的n次幂,听说这个好用:glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, tex.width(), tex.height(), GL_RGB, GL_UNSIGNED_BYTE, tex.bits()); 为什么我用了贴不上?窗口是白的? 展开
我现在要做的是把视频数据解码出来的图片放到窗口里,现在图片已经贴上了,但是还有两个问题:
1.我的图片要不断刷新,用这个glFlush();?? 怎么用?
2.我贴图用的这个:glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );但是它图片宽高都要是2的n次幂,听说这个好用:glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, tex.width(), tex.height(), GL_RGB, GL_UNSIGNED_BYTE, tex.bits()); 为什么我用了贴不上?窗口是白的? 展开
3个回答
展开全部
首先你要建一个 3D框架 相信你己经有了。
接着建一个文件夹,把你要用到的图像放到你的程序文件中。
用到纹理操作和 加载图像操作:以下是两个主要函数
void baisic::Ground()
{
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(1.0f,1.0f);glVertex3f(-80.0f,0.0f,-80.0f);
glTexCoord2f(0.0f,1.0f);glVertex3f(80.0f,0.0f,-80.0f);
glTexCoord2f(1.0f,0.0f);glVertex3f(-80.0f,0.0f,80.0f);
glTexCoord2f(0.0f,0.0f);glVertex3f(80.0f,0.0f,80.0f);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
int baisic::Load(char *fliename,GLuint &texture)
{
AUX_RGBImageRec *pImage=NULL;
pImage=auxDIBImageLoad(fliename);
if(pImage==NULL)
return false;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
free(pImage->data);
free(pImage);
return TRUE;
}
至于贴图的角度问题:你用旋转函数glRotatef()函数即可.
窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了;
很久没编写OpenGL程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;
接着建一个文件夹,把你要用到的图像放到你的程序文件中。
用到纹理操作和 加载图像操作:以下是两个主要函数
void baisic::Ground()
{
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(1.0f,1.0f);glVertex3f(-80.0f,0.0f,-80.0f);
glTexCoord2f(0.0f,1.0f);glVertex3f(80.0f,0.0f,-80.0f);
glTexCoord2f(1.0f,0.0f);glVertex3f(-80.0f,0.0f,80.0f);
glTexCoord2f(0.0f,0.0f);glVertex3f(80.0f,0.0f,80.0f);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
int baisic::Load(char *fliename,GLuint &texture)
{
AUX_RGBImageRec *pImage=NULL;
pImage=auxDIBImageLoad(fliename);
if(pImage==NULL)
return false;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
free(pImage->data);
free(pImage);
return TRUE;
}
至于贴图的角度问题:你用旋转函数glRotatef()函数即可.
窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了;
很久没编写OpenGL程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.首先你要建一个 3D框架 相信你己经有了。
2.接着建一个文件夹,把你要用到的图像放到你的程序文件中。
3.用到纹理操作和 加载图像操作:以下是两个主要函数
void baisic::Ground()
{
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(1.0f,1.0f);glVertex3f(-80.0f,0.0f,-80.0f);
glTexCoord2f(0.0f,1.0f);glVertex3f(80.0f,0.0f,-80.0f);
glTexCoord2f(1.0f,0.0f);glVertex3f(-80.0f,0.0f,80.0f);
glTexCoord2f(0.0f,0.0f);glVertex3f(80.0f,0.0f,80.0f);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
int baisic::Load(char *fliename,GLuint &texture)
{
AUX_RGBImageRec *pImage=NULL;
pImage=auxDIBImageLoad(fliename);
if(pImage==NULL)
return false;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
free(pImage->data);
free(pImage);
return TRUE;
}
4.至于贴图的角度问题:你用旋转函数glRotatef()函数即可.
5.窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了。
2.接着建一个文件夹,把你要用到的图像放到你的程序文件中。
3.用到纹理操作和 加载图像操作:以下是两个主要函数
void baisic::Ground()
{
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(1.0f,1.0f);glVertex3f(-80.0f,0.0f,-80.0f);
glTexCoord2f(0.0f,1.0f);glVertex3f(80.0f,0.0f,-80.0f);
glTexCoord2f(1.0f,0.0f);glVertex3f(-80.0f,0.0f,80.0f);
glTexCoord2f(0.0f,0.0f);glVertex3f(80.0f,0.0f,80.0f);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
int baisic::Load(char *fliename,GLuint &texture)
{
AUX_RGBImageRec *pImage=NULL;
pImage=auxDIBImageLoad(fliename);
if(pImage==NULL)
return false;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
free(pImage->data);
free(pImage);
return TRUE;
}
4.至于贴图的角度问题:你用旋转函数glRotatef()函数即可.
5.窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询