您的位置: 旅游网 > 明星

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

发布时间:2019-09-13 20:11:55

前面介绍了怎么样读取人物的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 }

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

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

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

count是图元的个数。

type是索引点的数据类型。

indices是索引数组。

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

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

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

查看本文来源

孩子发烧怎么办39度
小儿汉森四磨汤的功效
小孩健脾胃的药有哪些
汉森四磨汤口服液是中药吗
猜你会喜欢的
猜你会喜欢的