glGenTextures glubuild2dmipmaps

glGenTextures(GLsizei n, GLuint *textures)函数说明  n:用来生成纹理的数量  textures:存储纹理索引的  glGenTextures函数根据纹理参数返回n个纹理索引。纹理名称集合不必是一个连续的整数集合。  (glGenTextures就是用来产生你要操作的纹理对象的索引的,比如你告诉OpenGL,我需要5个纹理对象,它会从没有用到的整数里返回5个给你)  glBindTexture实际上是改变了OpenGL的这个状态,它告诉OpenGL下面对纹理的任何操作都是对它所绑定的纹理对象的,比如glBindTexture(GL_TEXTURE_2D,1)告诉OpenGL下面代码中对2D纹理的任何设置都是针对索引为1的纹理的。  产生纹理函数假定目标纹理的面积是由glBindTexture函数限制的。先前调用glGenTextures产生的纹理索引集不会由后面调用的glGenTextures得到,除非他们首先被glDeleteTextures删除。你不可以在显示列表中包含glGenTextures。

voidglGenTextures( GLsizein,GLuint *texture);

该函数用来产生纹理名称。这里纹理名称GLuint*texture是整型的,因此也可以理解为这个函数为这n个纹理指定了n个不同的ID。

在用GL渲染的时候,纹理是很常见的东西。使用纹理之前,必须执行这句命令为你的texture分配一个ID,然后绑定这个纹理,加载纹理图像,这之后,这个纹理才可以使用。加载纹理的代码如下:

BOOL LoadTextures(IplImage *pImage, GLuint *pTexture)
{
intStatus=FALSE;
if(pImage!= NULL)
{
Status=TRUE;

glGenTextures(1,&pTexture[0]); //注意这里
glBindTexture(GL_TEXTURE_2D,pTexture[0]);
glTexImage2D(GL_TEXTURE_2D,0, 3,
pImage->width,pImage->height,
0,GL_BGR, GL_UNSIGNED_BYTE, (unsigned char*)pImage->imageData);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
returnStatus;
}

使用上面这个函数时需要小心,这个函数只能放在循环外面使用!如果你想在循环中重复利用这个texture[0],给它加载不同的纹理(比如,你想在窗口中显示序列图像),而把这个函数放在循环内部调用的话,那么当程序循环足够多次之后,你的电脑将变得巨慢无比,甚至导致死机。原因就是反复地调用glGenTextures(1,&pTexture[0])。这个问题产生的机制我并不清楚,但是我今天实实在在的遇到了。

所以,上面这个函数一般都是放在循环外面,窗口初始化的时候,用于给背景加载纹理。那么,如果我必须要在循环中渲染序列帧的话,该怎么做呢?我们可以对上面的函数加一点小小的改变,如下:

BOOL LoadTextures(IplImage *pImage, GLuint texture)
{
intStatus=FALSE;
if(pImage!= NULL)
{
Status=TRUE;
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0, 3,
pImage->width,pImage->height,
0,GL_BGR, GL_UNSIGNED_BYTE, (unsigned char*)pImage->imageData);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
returnStatus;
}

在窗口初始化的时候先执行一遍:

glGenTextures(1, &texture[0]);

然后在你的循环内部调用:

IplImage *videoFrame = cvQueryFrame(capture);

LoadTextures(videoFrame, texture[0]);

这样就可以显示图像帧了,也不会再出现电脑运行速度变慢的问题了。总之,千万不要给一个texture重复分配ID。

我自己写的这个LoadTextures函数提供了图像buffer的接口,可以从外面读取视频帧并传给这个函数,绑定纹理,使用起来比较灵活。

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/269246.html

更多阅读

茅理翔:经营能动力

 这是一个艰难的年度。   中国企业如果不能在剩下的秋冬季拿出更好的措施来营救业绩,那么这轮救赎就注定要延续到2010年。  第一次进入全球经济周期的中国企业,现在最迫切需要的不是资金,而是一种驱动企业持续发展的能动力,这包

货币需求理论的演变 林业经营发展理论的历史演变

[内容提要]林业经营理论是林业生产实践的指南,对林业的发展具有极大的影响。本文详细梳理了林业生产中起主导作用的主要经营理论:森林永续利用理论、木材培育论、森林多功能理论、船迹理论和协同理论、林业分工理论、新林业理论、近

高腔 高腔-概述,高腔-高腔腔系

高腔为戏曲声腔一大类型,其外部形式特征首先表现在手段的组合――有“帮(腔)”与角色之“唱”相应和(即一唱众和),同时在帮、唱中不加管弦,而突出使用打击乐――这种帮、唱与打击乐三位一体的组合,有的地区称之为“帮打唱”。在高腔演唱的作

慕课的概念和特点 医德 医德-概念,医德-特点

医德是调整医务人员与病人、医务人员之间以及与社会之间关系的行为准则。它是一种职业道德,是一般社会道德在医疗卫生领域中的特殊表现。不同职业,由于担负的任务、职务的对象、工作的手段、活动的条件和应尽的责任等的不同,而形成自己

孙悟空人物评价 孙和 孙和-人物生平,孙和-历史评价

孙和(224年-253年),字子孝,三国时期吴国宗室、皇太子,吴大帝孙权第三子,会稽王孙亮、景帝孙休的异母兄弟。王夫人与孙和的一位姊妹全公主不和。不久,孙和因在入庙祭祀时拜访妻子的叔父,而被全公主陷害他无礼,又诬陷王夫人对当时病倒的孙权幸灾

声明:《glGenTextures glubuild2dmipmaps》为网友青衫温文分享!如侵犯到您的合法权益请联系我们删除