在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()); 为什么我用了贴不上?窗口是白的?
展开
 我来答
泊梦qaz
推荐于2016-06-18
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
首先你要建一个 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程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;
char_name_wind
2010-08-13
知道答主
回答量:51
采纳率:0%
帮助的人:0
展开全部
1,图你确定加上了么?
2,纹理坐标和顶点坐标搞对了没?
贴图参考NeHe的opengl教程

窗口的问题参照
http://tieba.baidu.com/f?kw=glut
里边的教程吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨云璃雪
推荐于2016-02-07 · TA获得超过2636个赞
知道小有建树答主
回答量:394
采纳率:50%
帮助的人:22.2万
展开全部
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坐标设置成窗口大小就好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式