摘要:
前面已经介绍了显示人物名称的基本框架,但是使用OpenGL显示这个名称出来是需要很复杂的步骤。由于OpenGL是图形引擎显示,也就是说所有字符的显示都是基于图形来显示,而图形的显示,就需要获取字体的图片,即是获取字体的字模。由于不能使用Windows的标准GDI来显示,那么就需要实现GDI所做的所有功能,比如从字体里读取每个字符的轮廓,然后生成合适大小的位图,再把这幅位图当作纹理贴到3D的平面上去,这样才可以在OpenGL显示字符串出来。在第二人生里的代码流程如下:1、LLFontGL::addChar() 添加一个字符纹理图片2、mImageGLp->bind() 绑定纹理图片。3、L 阅读全文
posted @ 2008-01-25 22:34
ajuanabc
阅读(168)
评论(0)
推荐(0)
摘要:
在第二人生里,每个人物显示都有一个名称,那么这个名称又是怎么样显示出来的呢?怎么样实现的呢?带着这两个问题,下面就去分析第二人生里面的实现代码。它的人物名称显示如下:蔡军生2008/01/24 QQ:9073204 深圳从上面的图片上,可以看到人物的头上有一个名称显示,用来标识人物角色。要显示这个人物名称,肯定是在二维的空间里显示的。每个人都有一个名称显示,很多人在一起时,就需要显示多名称。因此,在第二人生里把名称的显示和角色的显示是分离的。调用下面的代码来显示名称:1、LLPipeline::renderGeom()2、render_hud_elements()3、LLHUDObject:: 阅读全文
posted @ 2008-01-24 23:17
ajuanabc
阅读(168)
评论(0)
推荐(0)
摘要:
在第二人生里,人物的显示是比较复杂的,因为同一个网格模型可以显示为不同的人物出来,也就是人物每个部位的纹理不一样,比如不同的女孩子就有可能选择不同的头发,还可以穿着不同的衣服,不同的裤子等等。要实现这些功能,也就是说要把头、上身、下身、脚分开来显示。如下图所示:蔡军生2008/01/22 QQ:9073204 深圳现在就来仔细地分析一下第二人生里是怎么样分别显示不同身体部份的,它的代码如下:#001U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)#002{#003 U32 num_indices = 0;#004#005 if (!mI 阅读全文
posted @ 2008-01-22 22:04
ajuanabc
阅读(136)
评论(0)
推荐(0)
摘要:
上面已经介绍怎么样显示Mesh数据,也就是人物模型已经显示出来,那么同样的模型怎么样构造出各种各样的人物来呢?在第二人生里是使用各种各样的纹理图片来实现的。下面就来仔细地分析这段代码,如下:#001 U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)#002 {#003 if (!mValid || !mMesh || !mFace || !mVisible || #004 mFace->mVertexBuffer.isNull() ||#005 mMesh->getNumFaces() == 0) # 阅读全文
posted @ 2008-01-18 22:44
ajuanabc
阅读(212)
评论(0)
推荐(0)
摘要:
前面介绍了怎么样读取人物的Mesh数据,那么你也许会想到,读取数据之后是怎么样显示出来的呢?并且显示出活生活现的人物来。现在就来分析第二生里怎么样显示人物Mesh数据,它的显示流程如下:1、 LLAppViewer::mainLoop() 主线程的消息循环函数。2、 display() 主要渲染函数。3、 LLPipeline::renderGeom() 渲染管道显示函数。4、 LLDrawPoolAvatar::render() 人物缓冲池渲染函数。5、 LLDrawPoolAvatar::renderAvatars() 渲染所有人物。6、 LLVOAvatar::renderSkinned 阅读全文
posted @ 2008-01-17 22:28
ajuanabc
阅读(203)
评论(0)
推荐(0)
摘要:
前面介绍怎么样从文件里读取Mesh数据,那么怎么样知道数据从那里读取回来呢?这些信息又是记录在那里呢?现在就来分析这方面的问题。其实在第二人生里把这些信息保存在XML文件里的,可以在第二人生的目录character里找到文件avatar_lad.xml,这个文件就记录了人物角色组成信息。比如每个部位的组成文件名称,就可以通过下面XML片段可以找到: <mesh type="hairMesh" lod="1" file_name="avatar_hair_1.llm" min_pixel_width="160" 阅读全文
posted @ 2008-01-16 23:42
ajuanabc
阅读(183)
评论(0)
推荐(0)
摘要:
无需编写Java代码就能生成增删改查功能的CZTZ-JavaEE平台介绍王保政QQ:29803446Msn:baozhengw999@hotmail.com也许大家不会相信会有不用写Java代码就能生成增删改查功能的Java应用开发平台,但CZTZ-JavaEE Web快速开发平台的确实现了这一点。如果说中国应用软件的开发水平仍停留在手工作坊的时代,那么本平台的问世将至少可以否认这个观点。也许,中国应用软件的开发模式会因为此类平台的出现而有很大的变化----不懂编程的人员也可以通过平台定制自己的应用。项目的研发、实施周期大大缩短。不再有低水平的重复开发,软件组件的复用将会被发挥到极致。从我个人 阅读全文
posted @ 2008-01-16 09:12
ajuanabc
阅读(660)
评论(0)
推荐(0)
摘要:
从前面可以看到人物角色显示是比较重要的,也是比较复杂的。现在就来仔细地分析一下第二人生里的Mesh文件是怎么样读取的呢?可以显示出来如此逼真优秀的画面。如下图所示:蔡军生 2008/01/15 QQ:9073204 深圳在Mesh文件保存的格式里,最常用的有两种格式:文本格式和二进制格式。文本格式就是占用空间比较大,并且读取文件的数据也比较慢,但它便于查看。二进制格式是刚好相反的,在第二人生里使用的是二进制的文件格式。它的读取代码如下:#001 BOOL LLPolyMeshSharedData::loadMesh( const char *fileName )#002 {#003 //--. 阅读全文
posted @ 2008-01-15 22:14
ajuanabc
阅读(324)
评论(0)
推荐(0)
摘要:
在第二人生里,最重要的实现就是人物角色的实现,它不是基于第一视角实现的,而是第三视角的方式实现,因此每个居民在第二人生里是有一个虚拟人物角色代表的。这样构造出来的社会是多姿多彩,先来看看下面人物角色的图片:蔡军生 2008/01/14 QQ:9073204 深圳蔡军生 2008/01/14 QQ:9073204 深圳从上面看到各种各样的人物角色,穿着不同的衣服,摆出不同的姿势,形态各异。要实现这样的人物角色显示,是需要比较多的代码来实现的。首先是它的网格就比较复杂,有很多三角形才构造这样复杂的人物,刚刚头部构造的三角形网格大小,就有1.6M大小。其次它的骨骼动画也比较复杂,这些都需要大量的变换 阅读全文
posted @ 2008-01-14 22:14
ajuanabc
阅读(288)
评论(0)
推荐(0)
摘要:
在室外场境的实现中,有很多植物是需要显示出来的,比如树和花草是最常见的植物。下面就来看看第二人生里树显示的实现,如下图所示:蔡军生 2008/01/13 QQ:9073204 深圳看到如此优美的画面,让人感觉就是身临其境,快活如神仙一般。这样才提供给人们快乐的环境,度过美好的人生。那么这么优美的树是怎么样实现的呢?现在就来分析一下第二人生里树显示的实现,跟前面地面和天空一样,都是先创建网格,然再加上合适的纹理来实现的,代码如下:#001 BOOL LLVOTree::updateGeometry(LLDrawable *drawable)#002 {#003 LLFastTimer ftm(. 阅读全文
posted @ 2008-01-13 21:19
ajuanabc
阅读(158)
评论(0)
推荐(0)
浙公网安备 33010602011771号