3d引擎
飞天大蟾蜍
这个作者很懒,什么都没留下…
展开
-
开源3d引擎
新出的大型网游都3d化了。随着手机的性能提升,手机3d游戏早已不再稀奇。有迹像显示,网页游戏也开始3d化了。ogre很庞大,单是凑齐编译环境就得折腾半天,irrlicht,鬼火3d引擎,很小巧。点开即编译成功。原创 2012-05-04 09:31:20 · 1512 阅读 · 0 评论 -
quake中的aas部分
大概看了aas的reachability生成部分。同样也是借助bsp树。利用portal计算每个区域的可达性(分为是否需要爬梯,游戏,跳跃,或者直接走过去)area其实就是bsp树的叶子节点(经过合并,以及按重力方向进行分割,可以简单地认为就是bsp的叶子节点)生成时,采用遍历,计算每个area与周围的area是否可达,area有个属性 face链表(它们就是porta原创 2013-10-27 11:21:21 · 962 阅读 · 0 评论 -
quake aas初探
aas这块数据,从代码上来看,就是用于机器人寻路的。quake根据bsp树来生成aas这里简要说明一下bsp树,简单的说,就是利用场景中的每一个面,对空间进行分割(area)。quake会计算每个空间的连勇性,这样就得到了cluster,每个相连通的area处在同一个cluster里一般来说,一个场景只有一个cluster如果存在不连通的情况,说明场景里原创 2013-11-01 07:32:01 · 992 阅读 · 0 评论 -
irrlicht代码法线贴图相关问题
irrlicht的代码关于法线贴图的范例即 PerPixelLighting。程序准备资源部分,先是一个砖墙普遍纹理,设到 text0然后是一个法线纹理贴图,设到text1(中间经过处理,将对比度,转换成相应的法线数据)然后是在COpenGLDriver::drawVertexPrimitiveList函数中,会走到case EVT_TANGENTS原创 2013-11-25 22:07:01 · 1576 阅读 · 0 评论 -
ogre的动态光照
光照涉及大量的浮点数运算。ogre做了优化处理对于场景中的每个光源,首先根据摄影机,做一遍过滤。即,无法影响视截体的光源去除形成一个光源数组:mLightsAffectingFrustum对于每一个渲染对象rendableObject(类名大概是这样,派生了n多子类的那个).也要过滤,判断mLightsAffectingFrustum列表里的光源,是否会原创 2013-11-14 23:01:51 · 938 阅读 · 0 评论 -
irricht阴影体实现笔记
阴影体是一种动态阴影技术。仔细一看,这玩意儿其实很简单。利用的模拟缓冲的功能,把阴影体画进模板缓冲即可。这要求计算出物体对着光线的轮廓。本来觉得,怎么样高效地求出这个轮廓,发现irricht实现得非常简单,同时也意味着不够优化(笔者看的irricht版本是1.7的,可能最新的版本优化了)irricht直接取面对光线的那些多边形,然后利用这些多边形构造阴影体。(可原创 2013-12-07 23:18:28 · 1485 阅读 · 0 评论 -
irricht的水特效
水特效,但代码的名字却是 createHillPlaneMeshsin cos 波长 波动速度 每帧更新, 水面就是由许多点组成。分成若干块,每块贴上水纹理,以及水底的纹理(如水底的鹅卵石),双重纹理。(透明效果还得加入alph)好像很简单?原创 2013-12-07 23:24:27 · 1247 阅读 · 0 评论 -
纹理阴影实现笔记
ogre纹理阴影实现的三种方法ogre包含两种阴影实现技术,阴影体与阴影纹理.阴影体需要主cpu计算出物体的轮廓,同时生成更多的多边形,会降低帧率并且在骨骼蒙皮时,会存在问题(如果采用硬蒙皮,无法计算轮廓,软蒙皮则降低帧率)阴影体只需要将几何体按不同的视角绘制(往显卡数据传输量增加),对帧率影响较小.阴影体实现的原理.假设场影中有一个点光源,原创 2013-12-31 16:16:10 · 2592 阅读 · 0 评论 -
投影矩阵推导过程
3d程序经常要用到矩阵算法,比较常见的如旋转矩阵,平移矩阵,以及投影矩阵opengl与d3d均有对应的api进行相应的操作。本文主要介绍一下投影矩阵,(在阅读irricht与ogre代码时碰到了一些问题,发现视截体是根据投影矩阵计算出来的,其实也可以根据视角与摄影机的位置与朝向,计算出视截体的,quake就是这么做的)程序内存中保存的是x y z这样的三维数据,最终原创 2014-03-24 08:48:36 · 4109 阅读 · 0 评论 -
irrlicht bsp浏览器
看了irrlicht 的一个碰撞检测demo,里面导入了bsp,但是看了相应的导入代码,发现没有导入bsp pvs数据。/*!*/void CQ3LevelMesh::loadVisData(tBSPLump* l, io::IReadFile* file){ // ignore}确实没导入irrlicht把bsp里所有的面原创 2013-09-23 00:45:13 · 1135 阅读 · 1 评论 -
椭圆与三角形碰撞测试
看irrich代码,对里面的三角形碰撞检测代码一直搞不清楚,上网找到一篇文章,看样子,应该就是了相应的公式推导原文链接:http://www.job168.com/info/read_88279.html以下是原文(不知道作者是谁啊):胶囊和凸多边形的动态碰撞检测发表日期:2011-04-15 在使用广义碰撞阶段迅速排除了大量物体以后,将会使用精确转载 2013-09-13 15:56:15 · 1795 阅读 · 0 评论 -
3d图形开发--地形描制与lod
地形绘制比较简单,各种3d引擎实现基本相似,引入一个高度图,用颜色深浅来表示高度。依次扫描,根据高度,生成相应的三角形,最终形成地形鬼怪引擎,将地形场景作为八叉树场影管理的子类进行派生。采用的是性价比较高的GeoMipMap算法,即把地形分成相同的块,称为tile。根据每个tile距离观察者的距离,来决定该块的解析度。边界处理,由于相邻块原创 2013-07-10 21:44:20 · 1320 阅读 · 0 评论 -
q3 bsp随笔(2)
看完了q3的port生成,以及pvs的生成做个记录由于q3 bsp树生成时,将场景中所有的brush平面都参与,所以就可用bsp树的分割平面来切分portport从根节点开始,初始winding是根节点分割平面,与场景最大包围盒平面切割而成之后,剃归处理每个节点,对port进行切分,每个子节点的分割平面也做为port,被父节点的port切分这样,可以原创 2013-07-30 22:32:20 · 1317 阅读 · 0 评论 -
如何自学3d游戏
找一本opengl(或者directX)的入门教程,了解相应的api了解的过程,顺便回忆一下线性代数相关的零点知识,主要是矩阵相关的那一块。知道一些概念,比如判断一个点在平面的哪一则,如何旋转矩阵等(学习骨骼动画时,必不可少的知识)基本上知道一点皮毛,入门不成问题。找一份开源代码,开源3d引擎是一个不错的选择。比如鬼怪,鬼火等但这都不如直接找一款游戏来学习来得直接。原创 2013-07-27 23:37:43 · 1071 阅读 · 0 评论 -
q3 bsp随笔
阅读q3的bsp实现,做一些随笔记录,免得自己也忘了。首先谈到的是brush概念。笔者用最通俗的方法来解释一下brush用q3场景编缉,画一个六面体(长方体),观察得到的map文件会看到里面记录了一个brush信息,其实就是记录了brush的六个面!这就是brush。假设我们的场景都是由长方体构成,那么场景里有brush信息就都是长方体的信息(q3的br原创 2013-07-27 23:58:27 · 1115 阅读 · 0 评论 -
q3 bsp绘制的直观展示
在得到q3 bsp数据后,就可以根据当前所在结点,以及pvs画出。所有的pvs还需要做进一步裁减,即,在当前可视截体(所谓的frustm)内的节点,才会被绘制如下图所示,白色的是当前节点,浅灰色是处于frustum当中的pvs节点,深灰色不处于frustum中的节点4个frustum平面的法线(被笔者移到了观察点)由彩色线条标出原创 2013-08-25 16:04:33 · 1003 阅读 · 0 评论 -
q3explore
把q3的多边形导入至程序中,主要是导入bsp树,以及pvs,q3代码对每个pvs节点,与视截体进行测试,如果与视截体相交,才会画会一个大循环,判断当前叶子节点有哪些pvs,判断这些pvs节点是否落在视截体之内原创 2013-08-19 01:12:15 · 1540 阅读 · 0 评论 -
q3的灯光效果
q3光照效果的一部分,利用了多重纹理。预先计算好光照效果,生成光照效果位图。程序加载相应的纹理,以及对应的光照位图.不加光照的效果打开光照效果至此,q3的渲染仿真已经实现了差不多了,接下来玩玩q3的碰撞检测原创 2013-09-09 22:55:24 · 1654 阅读 · 0 评论 -
关于纹理炫目的问题
其实不是什么大问题,翻开任何一入门级的游戏开发教程,都会在纹理这一节提到,解决的方法也很简单,对于opengl相关的函数调用为 glTexImage2D (GL_TEXTURE_2D, miplevel, GL_RGB, scaled_width, scaled_height, 0, GL_RGB, GL_UNSIGNED_BYTE, pc_image );原创 2013-09-04 00:43:54 · 829 阅读 · 0 评论 -
视差贴图 parallax map
视差贴图,不同于法线贴图的是,会根据视角调整纹理映射的偏移,从而产生遮挡效果,但在多边形的边缘仍然是平的。(这个需要用浮雕映射来解决,利用gs阶段,输出更多的顶点,从而产生新的多边形,需要硬件能支持相应的渲染管线,题外话,此处略过不表,笔者认为如果边缘一般距离视点较远的话,一般情况下影响的效果有限)首先要有一个高度图根据视角,以观察到的点为终点,以纹理的最大高度(1原创 2015-05-13 07:46:39 · 2595 阅读 · 0 评论