![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术
ZERO2046
这个作者很懒,什么都没留下…
展开
-
HeapAlloc内部算法
大家都知道在VC中使用new操作符时(如果没有重载的话),其内部实际上调用了标准的malloc,而根据工程设置中选择的运行库的不同(是否多线程,是否调试,是否Dll等)调用了不同的malloc版本,多线程版malloc内部使用了Win32的关键区,而调试版会额外多申请一些内存用来保存调试信息,这些直接看VC附带的crt源码就可以看到。所有版本的malloc的共同点是最后都调用了Win32的API函原创 2005-12-23 01:16:00 · 4043 阅读 · 1 评论 -
WOW的地形渲染
魔兽世界的地形渲染,基本上有三种渲染路径:固定渲染管线(其中是不是又分几种就不清楚了);shader(带高光);shader(不带高光)用到shader的渲染路径又分别针对1层,2层,3层,4层(最多允许每个chunk使用4层纹理)专门写了shader代码。用MyWarCraftStudio打开WOW的misc.mpq包,shader / pixel / 目录下以"terrain"打头的b原创 2006-05-30 18:25:00 · 2982 阅读 · 2 评论 -
法线映射基本原理和相关的顶点数据压缩
法线映射我也是刚学会的,呵呵输入到固定渲染管线的顶点结构虽然可以定制,但也不是完全自由的,比如顶点位置必须是float3,纹理坐标float2,法线float3等等。如果使用可编程管线,由于VS的输入可以自由解析,所以相对来说就增加了很多灵活性。在使用切线空间的法线映射(normalmap)时,一般来说顶点数据中除了法线向量外还需要加入tangent向量和binormal向量信息,以便在V原创 2006-05-22 02:40:00 · 3176 阅读 · 8 评论 -
世界空间的法线映射
一看今天还挺早的(对于正常作息来说,也很“早”^^),再写点东西。最近一直在研究地形相关的东西,其中一个问题就是地形在经过了LOD处理之后,顶点光照变得不再适用。因为patch的LOD级别变化时,一些顶点会突然出现或消失,如果采用顶点光照,pop顶点附近的亮度就会发生突然的改变,看起来很不自然;另一个缺点是视野中远处的地形会缺乏光照细节,因为顶点很少。于是就考虑使用一个法线图来计算光照,分原创 2006-05-22 03:23:00 · 3577 阅读 · 1 评论 -
基于patch的地形PVS数据预处理(续)
前面一篇说了pvs数据的预处理,当时是用纯CPU来计算patch之间的可见性。后来听说有个IDirect3DQuery9接口可以判mesh的可见性,就试了一下,果然比用纯粹CPU计算快了很多。计算同样的512地图的pvs数据,原来的算法需要4.7小时,利用GPU之后缩短到了不到800秒,快了大约20倍。更重要的是从不同尺寸地图的pvs预处理得到的大致算法复杂度估计从原来的 n ^ log_2( 4原创 2006-05-07 18:04:00 · 1538 阅读 · 0 评论 -
基于patch的地形PVS数据预处理
PVS:Potentially Visible Set(潜在可见集)的缩写,方便起见以下可能会用小写这里说的不是传统意义上的室内基于portal的pvs,而是存储室外地形块相互可见性的一张二维表,也许叫pvs不太准确但我不知道该叫什么。我们的地形目前是基于patch的,也就是如果1号patch看不到3号patch,那么pvsData[1][3] = false;反之就为true。当然这张表的每原创 2006-04-27 23:42:00 · 1868 阅读 · 6 评论 -
好久没更新,居然还没有被取缔^^
最近比较忙,终于又专心写代码了,感觉这才是我要做的事情。一个多月前开始把重心转向3d引擎(以我这把年纪,转行是需要一定勇气的),发现自己以前从来没有用过CreateDevice,CreateVertexBuffer这些接口……熟悉了各种地形LOD算法:GeoMipmap,ROAM,SOAR……看WOW文件格式的时候却发现人家很可能根本没用LOD(如果没有设置“世界细节层次”的话),很崩溃,后来原创 2006-04-25 00:34:00 · 1230 阅读 · 2 评论 -
编译器递归的中止条件
利用编译器递归的模板算阶乘的代码如下,希望编译期就求值完毕,也就是说比如这么写 int res = factorial::result; 就相当于写int res = 6;templatestruct factorial{ enum { result = ( num == 0 )? 1 : num * factorial::result };};上面的代码看原创 2006-01-11 01:30:00 · 1913 阅读 · 4 评论 -
新的骨骼动画系统终于初具规模
连续纠缠了动画师好几天,终于基本实现预想的效果了,感觉真的很棒。下一步就是加到游戏里面了。回想起来可能受WOW影响太大了,也想做一样的上下身动作组合,也想做类似的武器多挂点,部件的局部动作(就是象高科技盾那样,自己带一个动作)加上更基础的骨骼动画帧间插值,自动过渡等等,这些都是原来的引擎不支持的,只能自己从头写。算起来大约相当于一个专职程序员近半年的工作量(实际上不只一个人),包括设计文档原创 2005-12-29 20:18:00 · 1488 阅读 · 1 评论 -
怎样禁止优化
每天都要搞到2~3点,上午一般来说10点还得起来,睡眠有点太少了。按说每天7个小时也差不多了,本科的时候11点熄灯,早上6,7点起来算来也差不多。但是那时候整个一精力充沛,每天踢球弹琴旷课打游戏(还经常包夜)啥也没落下。看来年龄还是起了一定作用的既然选在csdn写blog,还是来点技术吧。写这个东西感觉比较怪,不知道该以给别人看的心态来来写还是以给自己看的心态来写。想想还是当作自己一个笔记吧原创 2005-12-17 03:36:00 · 1354 阅读 · 0 评论 -
学会了手工计算开平方
以前一直不知道开平方是可以手工计算的,直到昨天晚上心血来潮开始看别人毕业的时候不要被我收藏的《数学手册》 ,BTW是77年出版的,如果计算机技术能这么长时间保持稳定该多好啊。是这么算的:原创 2007-05-20 23:38:00 · 10771 阅读 · 5 评论