科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件第二人生的源码分析(十七)人物Mesh数据显示的实现

第二人生的源码分析(十七)人物Mesh数据显示的实现

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

第二人生的源码分析(十七)人物Mesh数据显示的实现

作者:蔡军生 来源:CSDN 2008年1月21日

关键字: 数据显示 Mesh

  • 评论
  • 分享微博
  • 分享邮件

前面介绍了怎么样读取人物的Mesh数据,那么你也许会想到,读取数据之后是怎么样显示出来的呢?并且显示出活生活现的人物来。现在就来分析第二生里怎么样显示人物Mesh数据,它的显示流程如下:

1、 LLAppViewer::mainLoop()  主线程的消息循环函数。

2、 display() 主要渲染函数。

3、 LLPipeline::renderGeom() 渲染管道显示函数。

4、 LLDrawPoolAvatar::render() 人物缓冲池渲染函数。

5、 LLDrawPoolAvatar::renderAvatars() 渲染所有人物。

6、 LLVOAvatar::renderSkinned() 每个人物渲染显示。

7、 LLVOAvatar::renderTransparent() 每个人物渲染透明部份数据。

8、 LLViewerJoint::render() 每个人物的每个部份渲染显示。

9、 LLViewerJointMesh::drawShape()  每个部份渲染外状。

10、   llDrawRangeElements()  这个函数渲染每个三角显示。

 

先看一下llDrawRangeElements()函数里怎么调用OPENGL函数来显示人物角色的Mesh数据,代码如下:

#001  void llDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices)

#002  {

#003       if (end-start+1 > (U32) gGLManager.mGLMaxVertexRange ||

#004              count > gGLManager.mGLMaxIndexRange)

#005       {

#006              glDrawElements(mode,count,type,indices);

#007       }

#008       else

#009       {

#010              glDrawRangeElements(mode,start,end,count,type,indices);

#011       }

#012  }

 

glDrawElementsOpenGL基本的图元显示函数,它的定义如下:

WINGDIAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);

mode是显示的方式,比如三角形、三角形列表等等。

count是图元的个数。

type是索引点的数据类型。

indices是索引数组。

 

glDrawRangeElementsOpenGL基本的图元显示函数扩展函数。它的定义如下:

GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);

这个函数跟上面函数的参数不同之处,就是可以设置索引数组里的起点位置和结束位置。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
        邮件订阅

        如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

        重磅专题
        往期文章
        最新文章