游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2259|回复: 2

bump mapping 手动设置tangent vector 的值?

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-2-12 13:10:00 | 显示全部楼层 |阅读模式
各位大哥好.
我有一个简单的问题请教一下.
我在网上看到一个bump mapping的 demo.渲染两面相互垂直的墙壁.
tangent vector 是通过手动设定的.代码很简单,就是几个点而已.希望大家能帮帮忙
代码如下:
pVerts[0].pos = D3DXVECTOR3(wallSize, 0, wallSize);
        pVerts[0].uv = D3DXVECTOR2(1, 0);
        pVerts[0].normal = D3DXVECTOR3(0, 1, 0);
        pVerts[0].tangent = D3DXVECTOR3(1, 0, 0);

        pVerts[1].pos = D3DXVECTOR3(wallSize, 0, -wallSize);
        pVerts[1].uv = D3DXVECTOR2(1, 1);
        pVerts[1].normal = D3DXVECTOR3(0, 1, 0);
        pVerts[1].tangent = D3DXVECTOR3(1, 0, 0);

        pVerts[2].pos = D3DXVECTOR3(-wallSize, 0, -wallSize);
        pVerts[2].uv = D3DXVECTOR2(0, 1);
        pVerts[2].normal = D3DXVECTOR3(0, 1, 0);
        pVerts[2].tangent = D3DXVECTOR3(1, 0, 0);

        pVerts[3].pos = D3DXVECTOR3(-wallSize, 0, wallSize);
        pVerts[3].uv = D3DXVECTOR2(0, 0);
        pVerts[3].normal = D3DXVECTOR3(0, 1, 0);
        pVerts[3].tangent = D3DXVECTOR3(1, 0, 0);

        pVerts[4].pos = D3DXVECTOR3(wallSize, wallSize, -wallSize);
        pVerts[4].uv = D3DXVECTOR2(0, 1);
        pVerts[4].normal = D3DXVECTOR3(-1, 0, 0);
        pVerts[4].tangent = D3DXVECTOR3(0, 1, 0);//我在这里产生了疑惑,不知道(0,1,0)是怎么得到的? 为什么不是(0,-1,0)?
这个问题困惑了我很久,希望大牛们够指点迷津~  

        pVerts[5].pos = D3DXVECTOR3(wallSize, wallSize, wallSize);
        pVerts[5].uv = D3DXVECTOR2(0, 0);
        pVerts[5].normal = D3DXVECTOR3(-1, 0, 0);
        pVerts[5].tangent = D3DXVECTOR3(0, 1, 0);

           pIndex[0] = 0;
        pIndex[1] = 1;
        pIndex[2] = 2;

        pIndex[3] = 2;
        pIndex[4] = 3;
        pIndex[5] = 0;

        pIndex[6] = 0;
        pIndex[7] = 1;
        pIndex[8] = 4;

        pIndex[9] = 4;
        pIndex[10] = 5;
        pIndex[11] = 0;
下面是我画的示意图,沿着x轴方向看 (平行于y-z平面的墙.) 红色向量是我认为的tangent vector.(0,-1,0)
为什么代码中是 (0,1,0)?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2011-2-13 08:41:00 | 显示全部楼层

Re:bump mapping 手动设置tangent vector 的值?

binormap是反映uv变化的梯度,是可以计算的,但是有uv顶点分裂的问题,比较复杂,lz可以去查找一些文献看看怎么计算 tangent space

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2011-2-13 11:58:00 | 显示全部楼层

Re: Re:bump mapping 手动设置tangent vector 的值?

tonykee: Re:bump mapping 手动设置tangent vector 的值?

binormap是反映uv变化的梯度,是可以计算的,但是有uv顶点分裂的问题,比较复杂,lz可以去查找一些文献看看怎么计算 tangent space

谢谢你的回复~我看过计算tangent space的论文...只是这个是个平面而已,应该可以直观的看出来..不要考虑顶点分裂的问题吧,忽略平行于x-z平面的墙..我还是想不出第二面墙的tangent vector为什么是(0,1,0).最诡异的是,我用论文上的数学公式算出来的也是我所认为的(0,-1,0)..但是bump mapping的效果却不对..只有(0,1,0)的效果才是正确的..纳闷
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 11:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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