纹理映射的实现步骤

纹理映射的实现步骤,第1张

使用纹理对象的步骤如下:

第一步:定义纹理对象

const int TexNumber4

GLuint mes_Texture[TexNumber]//定义纹理对象数组

第二步:生成纹理对象数组

glGenTextures(TexNumber,m_Texture)

第三步:通过使用glBindTexture选择纹理对象,来完成该纹理对象的定义。

glBindTexture(GL_TEXTURE 2D,m_Texture[0])

glTexImage2D(GL_TEXTURE_2D,0,3,mes_Texmapl.GetWidth(),mee_Texmapl.GetHeight()

,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,mse_Texmapl.GetDibBitsl'trQ)

第四步:在绘制景物之前通过glBindTexture,为该景物加载相应的纹理。

glBindTexture(GLes_TEXTURE_2D,mse_Texture[0])

第五步缺陪慎:在程序结束之前乱陆调用glDeleteTextures删除纹理对象。

glDeleteTextures(TexNumber, mee_Texture)

这样就完成了全部纹伏敬理对象的管理和使用。

在三维图形中,纹理映射(Texture Mapping)的方法运用得最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块明返砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多半形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许OpenGL硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从册槐埋而减少了运算量,提高了速度。

纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不

必要的开销,是系统优化时必须考虑的一个问题。还好,OpenGL提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。这允许OpenGL硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。以本文为例,使用纹理对象的步骤如下:

第一步:定义纹理对象

coast int TexNumber4

GLuintmes Texture[TexNumber] //定义纹理对象数组

第二步:生成纹理对象数组

glGenTextures(TexNumber,m Texture)

第三步:通过使用glBindTexture选择纹理对象,来完成该纹理对象的定义。

glBindTexture(GL TEXTURE 2D,m_Texture[0])

g1TexImage2D(GL TEXTURE_2D,0,3,mes Texmapl.GetWidthU,mee Texmapl.GetHeight()

,0,GL BGR EXT,GL UNSIGNED BYTE,mse Texmapl.GetDibBitsl'trQ)

第四步:在绘制景物之州蚂前通过glBindTexture,为该景物加载相应的纹理。

glBindTexture(GLes TEXTURE_2D,mse Texture[0])

第五步:在程序结束之前调用glDeleteTextures删除纹理对象。

glDeleteTextures(TexNumber, mee Texture)

这样就完成了全部纹理对象的管理和使用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8217672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存