您的位置:首页 > 其它

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

2008-01-22 22:04 218 查看
在第二人生里,人物的显示是比较复杂的,因为同一个网格模型可以显示为不同的人物出来,也就是人物每个部位的纹理不一样,比如不同的女孩子就有可能选择不同的头发,还可以穿着不同的衣服,不同的裤子等等。要实现这些功能,也就是说要把头、上身、下身、脚分开来显示。如下图所示:



[align=center]蔡军生 2008/01/22 QQ:9073204 深圳[/align]

现在就来仔细地分析一下第二人生里是怎么样分别显示不同身体部份的,它的代码如下:
#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 }

这样分开显示的好处,就是可以显示各种各样的人物出来,多姿多彩,节省人物实现的数据下载,当然也是骨骼动画实现的需要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: