表情动画

 

多表情动画

实现方法

1.转换X文件为OPENGL容易读出的格式,是方便程序,我自定义格式MOR(MORPH的前三个字母)格式。

输出的mor文件结构

1 HEADER文件头   文件标志 = "morph01"   网格数量 ( unsigned )   顶点数量 ( unsigned )   材质数量 ( unsigned ) 2 信息列表  2.1 网格名称列表    网格名称1(32字节)    网格名称2    ...    网格名称meshNum  2.2 纹理名称列表    纹理名称1( 32 byte )    纹理名称2    ..    纹理名称matNum  2.3 三角形集数量列表    三角形集1数量( unsigned )    三角形集2数量    ..    三角形集matNum数量 3 顶点与三角形索引  3.1 顶点列表;    网格1的位置列表 (float*3*verNum)    网格1的法向列表 (float*3*verNum)    ...    网格meshNum的位置列表    网格meshNum的法向列表  3.2 纹理坐标列表;(float*2*verNum)  3.3 三角形索引列表    材质1对应的三角形索引(unsigned * 3 *三角形集1的数量)    材质2对应的三角形索引    ...    材质matNum对应的三角形索引

2.我这里采用了5个拓扑结构相同的网格模型,其中一个为基底模型,将基底模型的的纹理,法向,位置,三角形索引数据列表以及其它四个网格模型的位置法向列表输入到顶点缓冲中。

3.顶点着色。这里GLSL 实现

混合渐变动画顶点着色代码:

attribute vec3 verpos1; attribute vec3 verpos2; attribute vec3 verpos3; attribute vec3 verpos4;

attribute vec3 vernor1; attribute vec3 vernor2; attribute vec3 vernor3; attribute vec3 vernor4;

uniform vec4 bf;

void main() {  vec3 pos = (verpos1 - gl_Vertex.xyz) * bf.x;  pos += (verpos2 - gl_Vertex.xyz) * bf.y;  pos += (verpos3 - gl_Vertex.xyz) * bf.z;  pos += (verpos4 - gl_Vertex.xyz) * bf.w;  pos += gl_Vertex.xyz;

 vec3 nor = (vernor1 - gl_Normal) *bf.x;  nor += (vernor2 - gl_Normal) *bf.y;  nor += (vernor3 - gl_Normal) *bf.z;  nor += (vernor4 - gl_Normal) *bf.w;  nor +=gl_Normal;

 vec3 posView = (gl_ModelViewMatrix * vec4(pos,1.0)).xyz;

 vec3 normal = gl_NormalMatrix * nor;  normal = normalize(normal);  vec3 lightDir = vec3(0.0,0.0,0.0) - posView;  lightDir = normalize(lightDir);  float lum = dot(normal, lightDir);    gl_Position = gl_ModelViewProjectionMatrix * vec4(pos,1.0);  gl_FrontColor = vec4(lum,lum,lum,1.0);  gl_TexCoord[0] = gl_MultiTexCoord0; }

 

 

实现环境:VC6.0,OPENGL2.0,显卡X600,显寸128M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值