设为首页 加入收藏

TOP

OpenGL纹理UV动画
2014-11-24 00:35:27 来源: 作者: 【 】 浏览:6
Tags:OpenGL 纹理 动画

OpenGL纹理动画,常见做法是将一个视频离散成一系列静态帧图像,逐个图像上传到OpenGL生成纹理资源,保持四边形的位置、纹理坐标数据不变,动态绑定不同纹理从而实现播放视频效果。这种做法通常不是最优的,可以从两个地方改进:
1. 采用glTexSubImage2D函数,保持纹理Id不变情况下,动态替换纹理内容
2. 如果图像很小,可以将一系列图像打包到一张图片中去,通过纹理UV索引不同子图像


本文通过UV坐标直接操作图像实现动画效果。


源码下载


具体下载目录在 /2014年资料/3月/25日/OpenGL纹理UV动画


1. 纹理坐标空间


如下图为Nate Robin教程中的texture截图:



纹理空间视图,s轴为U坐标,t轴为V坐标。 u=1,v=1切好取到一张完整的图片,u=2, v=2如下图,取了四张完整的图片作为贴图:


OpenGL纹理UV动画


OpenGL中有纹理矩阵堆栈,理论上可以通过矩阵操作纹理,但是没有实例。基于上面的尝试,我尝试通过动态修改纹理坐标实现一个精灵动画。


2. 贴图准备



图片是TGA格式的,黑色部分alpha通道值为0。 开启alpha融合以后,黑色部分最终显示为背景色,只有白色箭头可见。


通过控制纹理V坐标实现箭头流动动画。


3. 程序实现


初始化 指定纹理坐标:


struct Vertex
{
float tu, tv;
float x, y, z;
};


int g_vertexCount = 4;
float g_quadWid = 0.2f;
float g_quadHgh = 2.0f;
float g_textureU = 1.0f;
float g_textureV = 2.0f;
float g_arrowSpeed = 0.01f;


Vertex g_quadVertices[] =
{
{ 0.0f,0.0f, -g_quadWid/2,-g_quadHgh/2, 0.0f },
{ g_textureU,0.0f, g_quadWid/2,-g_quadHgh/2, 0.0f },
{ g_textureU,g_textureV, g_quadWid/2, g_quadHgh/2, 0.0f },
{ 0.0f,g_textureV, -g_quadWid/2, g_quadHgh/2, 0.0f }
};


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android Layout背景绘制不全的问题 下一篇Android NDK 中使用STL

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: