基于OpenGL纹理映射技术实现动态图像的应用

第21卷第5期计算机仿真2004年5月—————==一————==———=—=—=————=————————————————————=——一

文蕈编号:1006—9348(2004)05—0130—03

基于OpenGL纹理映射技术实现动态图像的应用

陈应松,胡汉春,肖世德

(西南交通大学机械学院,四川成都610031)

摘要:对OpenGL纹理映射技术在Vc++6.0下实现动态图像进行了应用研究。该文讲解了.单幅图像和多幅图像实现动态化的过程。详细阐述r单幅图像的滚动、旋转和缩放。详细介绍r怎样结合OpenGL融合技术实现多幅图像的动态化。该文只介绍r图像的切换和图像的掩模,读者可在此基础上进行扩展应用。

关键词:纹理映射;动态图像;环境

中图分类号:TP391.41文献标识码:A

1引言

OpenGL是国际上通用的图形硬件的软件接口,独立于操作系统和硬件环境,目前已成为跨平台最广泛的三维引擎,是事实的三维图形标准,被广泛应用于CAD/CAM/CAE、建筑学、医学、模拟仿真、虚拟现实广告中等。OpenGl.灵活方便地实现了二:维和三维的高级图形技术,在性能上表现得异常优越。它不但能进行光线处理、色彩处理、动画等,而且可以进行物体运动模糊效果的处理、雾化处理和纹理映射等。本文主要介绍利用纹理映射的强大功能,结合融合技术(blending)绘制出具有特殊效果的动态纹理图像。

2单幅图像的动态纹理映射

2.1具有滚动效果的纹理图像

在绘制带纹理的场景时,必须同时提供物体坐标和纹理坐标。物体坐标决定在屏幕上的什么地方对特定顶点进行渲染,纹理坐标控制纹理图像中的纹素怎样映射到物体。纹理坐标可以是1、2、3、4维的,通常也用齐次坐标来表示即(s,t’r,q)。OpenGL定义纹理坐标的函数为glTexCoord(),常用glTexCoord2f()这种形式。

绘制具有滚动效果的纹理图像,关键在于纹理坐标的设置。纹理坐标的某个分量上加变量roll,可以加在一个坐标分量上,也可以加在几个坐标分量上(所加的变量可以不同)。随着变量的改变,纹理坐标不断改变,其所要映射的纹理图也就不断变化,那么最终映射到屏幕上的图像不断变化形成了‘滚动动画的效果。这个过程可以理解为纹理图的周围有无数个与之相同的纹理图,它左边是0.0,右边是1.0;如果向左边移动半个纹理图(一0.5),新纹理图的右半在原图上已移动到原图的左半部,新纹理图的左半移动到原图左边纹理图的右半部。这些纹理图彼此完全

收稿H期:2003—02—17

一130~

相同,因此新纹理图的右半是纹理图的左半部,新纹理图的左半是纹理图的右半部。如果再向左边移动一0.5,就可以看到一个与原纹理图完全相同的纹理图,但它不是原纹理图而是原纹理图左边的纹理图。纹理坐标向左移动,与之对应的物体坐标不变,映射到屏幕上的纹理图则向相反的方向移动即向右运动(比如在飞驰的火车上看到两边的树木向后运动)。

下面的程序显示了映射在屏幕的9个纹理图向上和向右滚动。纹理图像映射到正方形上,对纹理同时在s和t两个方向进行重复GL—REPEAT,用3.0代替1.0说明在s和t两个方向各重复三次,即映射了9个纹理图。纹理坐标s、t加负值,纹理坐标向左、向下改变,图像向上和向右滚动。主要语句如下:

glPixelStorei(GL—UNPACK—ALIGNMENT,1);

glTexEnvf(GL—TEXTURE—ENV,GL—TEXTURE—ENV—MODE,GLMODUIATE);

glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE—MIN—F1I肺R,GL—I姗AR);

glTexPammeteri(GL一111姗『RE一2D,GL—TEXTURE—MAG—FⅡ肫R,GL—I腿AR);

glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE~WRAP一‘S,GL—REPEAT);

glTexPammeteri(GL—TEXqlmE一2D,GL—TEXTURE—WRAP—T,GL—REPEAT);

glTexImage2D(GL—TEXTURE一2D,0,3,nWidth,nHeight,

0,GL—BGR~EXT,GL—UNSIGNED—BYTE,pBytes);//定义二维纹理映射

glBegin(GL—QUADS);//绘制纹理四边形

glTexCoord2f(一roll+0.Of,一roll+0.Of);glVertex3f(一1.1f,一】.1f,0.of);//左下角

 万方数据万方数据

相关文档
最新文档