蔡军生先生第二人生的源码分析(十九)人物组合显示

在第二人生里,人物的显示是比较复杂的,因为同一个网格模型可以显示为不同的人物出来,也就是人物每个部位的纹理不一样,比如不同的女孩子就有可能选择不同的头发,还可以穿着不同的衣服,不同的裤子等等。要实现这些功能,也就是说要把头、上身、下身、脚分开来显示。如下图所示:
蔡军生 2008/01/22 QQ:9073204 深圳
 
现在就来仔细地分析一下第二人生里是怎么样分别显示不同身体部份的,它的代码如下:
#001 U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
#002 {
#003       U32 num_indices = 0;
#004 
#005       if (!mIsBuilt)
#006       {
#007              return num_indices;
#008       }
#009 
……
……
#077       //--------------------------------------------------------------------
#078       // render all geomety attached to the skeleton
#079       //--------------------------------------------------------------------
#080       static LLStat render_stat;
#081 
#082       LLViewerJointMesh::sRenderPass = pass;
#083 
 
这里开始显示人物的各部位网格和纹理。
#084       if (pass == AVATAR_RENDER_PASS_SINGLE)
#085       {
#086              BOOL first_pass = TRUE;
#087              if (!mIsSelf || gAgent.needsRenderHead())
#088              {
#089                     num_indices += mHeadLOD.render(mAdjustedPixelArea);
#090                     first_pass = FALSE;
#091              }
上面显示头部。
 
#092              num_indices += mUpperBodyLOD.render(mAdjustedPixelArea, first_pass);
上面显示上身。
 
#093              num_indices += mLowerBodyLOD.render(mAdjustedPixelArea, FALSE);
上面显示下半身。
 
#094 
#095              {
#096                     LLGLEnable blend(GL_BLEND);
#097                     LLGLEnable test(GL_ALPHA_TEST);
#098                     num_indices += renderTransparent();
上面调用函数renderTransparent显示头发、裙子。
 
#099              }
#100       }
 
这样分开显示的好处,就是可以显示各种各样的人物出来,多姿多彩,节省人物实现的数据下载,当然也是骨骼动画实现的需要。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值