|
|
阅读了你写的Cg版本的BumpMap的程序,感觉学到了不少东西,效果真的不错。
不过,我这两天有一点小小的疑惑,你的总体思路我猜测应该是把每一个三角形的顶点和纹理作为函数CalculateTBNMatrix()的参数然后求出每个三角形的TBM矩阵,然后用纹理通道传给顶点渲染脚本程序(vertex.cg),进行计算。
你的程序很好,我已经看了两天了,但发现一些我不明白的地方
(1)
CVector g_vQuad[2][3] =
{
{ CVector(-10.0f, -10.0f, 0.0f), CVector(10.0f, -10.0f, 0.0f), CVector(10.0f, 10.0f, 0.0f) },
{ CVector(-10.0f, 10.0f, 0.0f), CVector(-10.0f, -10.0f, 0.0f), CVector(10.0f, -10.0f, 0.0f) }
};
你用三角形FAN来画,所以只用到了 [0][0] [0][1] [0][2] [1][0] 这四个顶点的坐标。可是计算切空间矩阵TBNMatrix的时候用的却是g_vQuad数组的第一列g_vQuad[0]求第一个三角形,用 g_vQuad数组的第二列g_vQuad[1]求第二个三角形。可是第g_vQuad数组第二行的三个顶点并不是在渲染函数里使用的三角形坐标啊!
我没有用GL_TRIANGLE_FAN而用G L_TRIANGLES渲染,这个问题就很明显了。因为g_vQuad数组的第二行的三个顶点坐标组成的三角形根本和第一个不能拼合成正方形,而是两个交叉的三角形。所以,g_vQuad二维数组 第二行的三个CVector类型的坐标我按照能和第一个拼合成一个正方形的值修改了一下,但却出现了明显的中间缝隙。如果用这个方法做DOOM3怪物的Bump效果的话,岂不是怪物表面三角形的组成非常的明显?
请教sm3d,如果不用三角形扇而用最普通的三角形渲染的话,这个程序还需要改动一下哪里才能正确呢?我一直希望能找到一种通用的Dot3BumpMap的方法。
|
|