游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2310|回复: 6

SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

[复制链接]

36

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2005-10-11 08:48:00 | 显示全部楼层 |阅读模式
阅读了你写的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的方法。

sf_2005101184753.jpg

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2005-10-11 13:43:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

现在大部分的凹凸纹理映射的例子都没有通用性的,都是局限于画一个立方体之类的,根本不能应用到很多三角形组成的复杂物体上,比如人物模型。

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-11 17:39:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

现在大部分的凹凸纹理映射的例子都没有通用性的,都是局限于画一个立方体之类的,根本不能应用到很多三角形组成的复杂物体上,比如人物模型。
网上早就有很多通用的例子了,只不过你没有注意而已

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2005-10-11 17:43:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

哪里有?楼上的不会是随口说说吧!


不过我觉的sm3d的这个程序已经很地道了,就是可能需要点修改就能通用成任意多边形的了。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2005-10-11 17:48:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

此种做法在 nv的那本书上有详细说明....

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-11 18:07:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

在新浪游戏制作论坛,中国游戏开发者和这个网站早就有人问过这个问题,并且都有人做出过回答
ati sdk,nv sdk中都有,难道这些还不够么,关键在于你是否真正注意过这些问题

73

主题

149

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2005-10-11 20:23:00 | 显示全部楼层

Re:SM3D请进,我想请教一个关于你用Cg完成的BumpMap的那个程

1. CalculateTBNMatrix函数的功能是已知一三角形三顶点的位置和纹理坐标,求出该三角形的TBN矩阵。g_vQuad数组有2行:第1行是第1个三角形三顶点的位置;第2行是第2个三角形三顶点的位置。g_vQuad的第2行的三个顶点位置是写错了,这样计算的就不是渲染中的第2个三角形的TBN矩阵,谢谢你指出来,你可以改过来!不过由于这4个点是共面的,所以无论计算哪个三角形其TBN矩阵都是一样的,所以没表现出错误,这是个巧合,呵呵!
2. 要计算一MESH的TBN矩阵的话,由于其顶点是由多个三角形共享的,所以先遍历所有顶点并将它们的切线和法线置0;然后,遍历所有三角形,计算TBN矩阵,并加到该三角形的每个顶点上;接着,再次遍历所有顶点,并归一化切向量和法线,这样将会在每一顶点处取平均。这是比较常用的一种方法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 07:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表