- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 MD2载入和绘制
MD2模型格式是Quake2中使用的模型格式,在图形硬件相对低速的时代,作为一种方便格式对3D人物模型进行表示.以其简洁易用的特点闻名,也因此具有许多局限性:1.构造原理不设计人体骨胳学,所以不能对人物骨胳运动细节进行描述.2.祯动画要求对每祯顶点数据进行保存,消耗大量内存.3.模型文件不对顶点法线进行保存,只能采用"三角形->面法线->顶点法线"的计算 方式来对顶点法线进行近似计算
2009-05-16 22:07:00 1548
原创 ParallaxMapping
ParallaxMapping是传统BumpMapping的一个变种,其原理是根据表面高度纹理和当前视点朝向对纹理坐标进行偏移,以为凹凸表面添加视差效果.优点:相对于更为复杂而开销巨大的技术(Relief Mapping和Displacement Mapping),Parallax Mapping以较少的开销完全对视差效果的良好近似.避免了RelefMapping庞大计算量和Displ
2009-05-11 22:54:00 1337
原创 设计模式术语
藕合:软件构件之间相互依赖的程序.聚合对象:一种包含子对象的对象.这些子对象称为聚合对象的部分,而聚合对象对它们负责.动态绑定:发送给对象的请求和它的操作在运行时刻进行连接.型构:对象声明的每个操作的名称,参数和返回值称为操作的型构.接口:对象操作所定义的所有操作型构的集合.类型:特定接口的名字.多态:在运行时刻接口匹配的对象能相互替换的能力.混入类:能给其他类提供可选择的接口或功能的类.对象的类
2009-05-11 11:04:00 711
原创 BumpMapping
就现在来说凹凸映射早已不是什么新奇的技术,但其作为许多高度技术的基础,高效地增加几何体细节以及易于实现的特点使其得到广泛应用.凹凸映射的思想方法很多,但现在广泛为硬件所支持的是法线映射.这里不打算对其进行详细的描述,只简略的列出我认为比较重要的要点:由于法线图的本质是储存经过干扰后法线的结果,所以为了避免为每个模型空间构建法线图,通过构造一个切空间变换矩阵将视向量和光线量变换到切空
2009-05-10 21:25:00 787
原创 连续细节层级地形的优化
在前些天发布了连续细节层级地形初步实现的Demo后,在近来的几天我对原来的算法进行了各方面的优化,使得改良后的算法具有以下几个优点:(1)通过压缩数据类型减少内存占用量(2)借助于SM3.0的Displace Mapping对整个地形块内对一个33*33的顶点缓存进行复用,大大减少显存占用量(3)由于采用(2)里面的方法替代原来的每个地形块都有自己的顶点缓存的方法,使得状态切换次数较少(3)添
2009-04-21 21:15:00 737
原创 连续细节层级地形的初步实现
连续细节层级(CLOD Terrain)的基本思想就是在需要的地方以更多的三角形面构造地形,在不需要的地方以较少的三角形面构造地形,以达到在有限的GPU性能下通过合理分配三角形面来获得尽量好的视觉效果. 目前比较主流并为大多数人所接受的地形绘制算法有:ROAM,QuadTree,ChunkLod等,但这些算法大多在GPU性能未达到工业标准的时代所发现,所以
2009-04-12 11:17:00 1168
原创 new operator和delete operator
C++语句:string *pStr = new String;由编译器产生的new operator的近似代码:{ void *memory = operator new(sizeof(string)); // 然后在memory所代码的内存块上调用string类相应的构造函数 // 这里要注意的是:所谓的构造函数是由编译器自动调用的,程序
2008-12-26 14:42:00 834
原创 隐式类型转换
C++本身对内置类型定义了各种隐式的类型转换,这种内置的类型转换在可能导致精度丢失的情况下编译器会发出警告,但当我们定义自己的类型时,提供各种隐式转换往往是弊大于利的(至少在我编写过的代码中很少用到).隐式的类型转换可分为:其它类型到本类型,本类型到其它类型两种.第一种通过单变量可调用之构造函数进行实现,第一种则通过用户定义之隐式转换函数进行实现.也许在某些特殊的情
2008-12-20 15:28:00 953 1
原创 GLSL实现Interactive Fluid
完成的部分:1.流体本身的绘制和更新未解决的部分:1.由于采用经过抖动的屏幕坐标进行折射图纹理采样,在设置了GL_CLAMP_TO_EDGE之后仍然会导致边沿采样走样,仔细对比了游戏编程精粹6的样例,发觉在OpenGL上设置了与D3D对应的OpenGL纹理环绕参数,但仍未能避免这个问题.2.反射图在进行采用纹理坐标抖动后发生采样错误.Demo效果截图
2008-12-08 23:34:00 2537
原创 GLSL实现HDR Rendering
HDR - 全称High dynamic rang,是目前流行的3D特效技术.其基本原理是:虽然在计算机图形中可以使用完全的浮点型来表示颜色,但之前由于一直受到硬件的限制,从外部载入的纹理格式大多只能以每种颜色成分用一个字节来表示,也就是0-255,当这个低范围的颜色值转换为浮点型之后就会导致一定量的颜色间隔,而HDR技术通过采用浮点型的外部纹理格式弥补了原来整型纹理格式所导致
2008-11-29 11:46:00 7479 1
原创 GLSL实现Image Filter
图像过滤无论是在作图工具还是特效的实现上都时有运用,这里发一些通常会使用到的图像过滤着色器供有需要的朋友参考.备注:这里列出的都是片元着色器,顶点着色器都是一样地简单变换顶点和传递纹理坐标.高斯过滤 - 常用于进行图像模糊横向过滤:const int g_iWeightNumber = 17;
2008-11-27 13:41:00 3985
原创 GLSL实现Simple Displace Mapping
最近情绪有点消沉,状态不佳就不写太多了.Dislace Mapping其实就是在顶点着色器中对顶点进行置换偏移,经常用于水仿真流体绘制.顶点着色器:uniform float g_fScale;uniform sampler2D g_DisplaceTexture;void main(){ float fDisplace = texture2DLo
2008-11-20 18:35:00 2039
原创 设计模式之工厂方法
#include #include using namespace std;// Document抽象类 class Document{public: // 默认构造函数 Document(){} // 析构函数 virtual ~Document(){} // 返回描述信息
2008-11-19 17:17:00 731
原创 GLSL实现简单硬件Anisotrop Lighting
各向异性光照往往用于处理一些具有各向异性表面的物体,如:光盘的盘面.为避免在程序实时进行各向异性计算的高消耗,现可将表面的各向异性离线编制成一个纹理,这样就只需要在着色器中对它进行查询就可以了.具体的实现方法是:根据表面法向量N,光向量L和视向量V分别计算顶点纹理坐标,并在片元着色器将差值后的结果进行纹理查找.gl_TexCoord[0].s = max(dot(L
2008-11-13 23:35:00 1570
原创 GLSL实现Fresnel And Chromatic aberration
使用Shader实现菲涅尔和颜色色散效果很简单,在Cg教程和OpenGL Shader Language都有较为详细的介绍,个人觉得需要注意的地方是反射向量和折射向量应该在世界空间中进行计算,在模型空间和照相机空间中计算都会导致错误的结果.具体着色器代码:顶点着色器:const float g_fEta = 0.66; // 空气和玻璃的折射材质比例const float g_fE
2008-11-13 12:36:00 2874
翻译 Shadow Mapping
Shadow Mapping阴影映射Shadow mapping was introduced by Lance Williams in 1978, in a paper entitled "Casting curved shadows on curved surfaces". It has been extensively used since, both in off
2008-11-11 23:46:00 2586
原创 设计模式之策略模式
#include using namespace std;// 飞行行为接口类 class FlyStrategy{public: virtual void Fly() = 0;protected: FlyStrategy(){}};// 高空飞行行为具现类 class HeightFly:public Fl
2008-11-07 12:29:00 816
原创 GLSL实现Ambient Occlusion
相信使用OpenGl或DirectX3D的朋友都知道到固定功能管线在光照处理主要由环境光,散射光和镜面光构成,这样一个光照处理模型在被光的地方将以统一的环境光进行着色,导致一种不自然的不真实效果.本文介绍的Ambient Occlusion方法将使用不当预计算的方式离线的生成模型的AO图,并在片元着色器中将对此AO图进行采样的结果与环境光和散射光效果进行相乘以适当削弱环境光和散射光的强
2008-11-04 22:58:00 3885 2
原创 GLSL实现Glow效果
Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使用GLSL实现一个典型的GLow效果. 实现步骤:1.渲染整个场景到一个祯缓冲区中 2.将场景中需要进行GLow处理的物体绘制第二个FBO纹理A中 3.在FBO纹理A和B之间进行横和纵"高斯"过滤 4.将进行过GLow处理后的FBO纹理A与祯缓冲区中的场景图像以glBlendFu
2008-11-04 22:31:00 14680 4
原创 初始角色生成系统
在RPG游戏策划中保存玩家与玩家所扮演的游戏角色感觉和情绪的同步性和亲切性犹其重要,毕竟保存游戏角色和玩家的平行生活将使RPG游戏更具吸引力.下面列出了几种初始角色生成系统:1.属性角色生成: 玩家可以自由为自己选择的游戏角色设置相关属性,包括外貌和各种能力属性优点: 扩大了玩家对初始游戏角色的控制能力缺点: 不方便新玩家迅速进入游戏2.类型选择生成: 游戏中预先设定了几种游戏
2008-04-21 13:08:00 1236
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人