2006年9月3日

Shadow Volume

弄了一天的 Shadow Volume,还是有点收获的。基本的过程是了解了。
单个三角形的情况还很容易理解,多个的还没想明白。要努力啊
整整弄了一天,也没有War3。快开学了,时间不多了,该做点事了
xophiix回来了,自己感觉还是很受鼓励的。
06.09.05
今天是非常的不爽,在代码即将写完的时候,VS.NET 2003顺利崩溃。更为致命的是产生了罕见的蓝屏错误,然后启动失败。然后启动了若干次启动到安全模式。check hard disk,这个硬盘一直有问题。哎,本来准备今天见到效果 的。
06.09.05
今天重写了,所有的物体都出来了,偏偏阴影不见了。3维程序调试起来也很麻烦,跟普通的不一样,他是看效果的。
06.09.06
终于改出一个能用的了。从NeHe的27课弄出来的。因为昨天写的那个是VS.NET 2003写的,用xophiix的框架,现在VS彻底崩了,无法编译了。NeHe的一个做法让我很不解,他从文件里读顶点信息,也就是说你要画一个物体,必须提前计算出所有顶点。实际上多个面可能有一个公共的顶点的。在OGL里就可以画每个面的时候都glVertex..... ,判断两个面是否相邻时判断顶点的坐标是否相等。我重载了struct SVertex的 == 操作符。尽管重载并不是好事。


bool operator== (SVertex p1, SVertex p2)
{
if(p1.x == p2.x && p1.y == p2.y && p1.z == p2.z )
return true;
else
return false;
}

还有矩阵那一部分也要改一下,其实没必要重新生成一个矩阵,用逆矩阵就可以了。实际上他那个矩阵变换我还是有点不明白的。
06.09.06
现在明白NeHe为什么那样读取数据了,很多模型文件(比如3ds)都是在前面存模型的顶点,面的信息里只有顶点的索引。听xophiix说的。
看来线性代数的东西还是比较重要,连个矩阵求逆都不会了。还到处找资料^_^
06.09.08
NeHe求逆矩阵的方法真是奇怪,按相反方向进行变换,然后glGetFloatv(GL_MODELVIEW_MATRIX, curMatrix);
其实有专门的矩阵函数的............,比如高斯-约旦法。不过我只有代码,具体的数学知识并不清楚。要开始研究3DS文件了。程序员们总喜欢做抽象层。。。
从NeHe的网站上看到一段话,会让很多人汗颜了
One final note, if you see code that you feel is similar to someone else's code, please contact me. I assure you, any code I borrow from or learn from either comes from the MSDN or from sites created to help teach people in a similar way that my site teaches GL. I never intentionally take code, and never would without giving the proper person credit. There may be instances where I get code from a free site not knowing that site took it from someone else, so if that happens, please contact me. I will either rewrite the code, or remove it from my program. Most the code should be original however, I only borrow when I absolutely have no idea how to accomplish something, and even then I make sure I understand the code before I decide to include it in my program. If you spot mistakes in any of the lessons, no matter how tiny the mistake may be, please let me know.
现在看来把
阴影加到3DS模型里还是比较容易的,3DS文件的定义和需要的数据差不多。明天得补一下功课了。可惜矩阵变换那一部分还是有点不明白,必须用我认为错误的方法才能得到正确的结果。。。
Z-PASS + 3DS基本上弄得差不多了,发张图先

要z-fail了,会是一个难点啊。还有今天因为要用Import3DS这个函数而从CLoad3DS继承了CBW3DSShadow被cactus和xophiix。。。。
的确是经验啊,继承不该被滥用。而且,有些成员为了这次继承变成了protected,又是滥用.......
06.09.14
今天例会又讲了一下Shadow Volume,才发现有些地方还是没真正弄明白,只是弄了一个能用的东西而已。像glLoadIdentity之后glRect产生的图形将覆盖整个屏幕。老是以为相机已经设定好了。还要改进啊,z-fail并不急,先用NV的改进方法吧。场景还要改善,新的地形和光束....
06.09.26
终于把ShadowVolume真正弄明白了,耶,还有soft shadow呢。4点多了。

没有评论: