词条 | 纹理映射 |
释义 | 简介纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。 在三维图形中,纹理映射(Texture Mapping)的方法运用得最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多边形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许OpenGL硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。 纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,OpenGL提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。这允许OpenGL硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。 实现步骤使用纹理对象的步骤如下: 第一步:定义纹理对象 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.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); 这样就完成了全部纹理对象的管理和使用。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。