游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5563|回复: 10

请问为什么要用纹理UV 去求副法线?严重不明白。。

[复制链接]

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2007-4-23 12:59:00 | 显示全部楼层 |阅读模式
// Finds binormal based on three vertices with texture coordinates.
// Fills in dummy values if the triangle has degenerate texture coordinates.
LLVector3 calc_binormal_from_triangle(
        const LLVector3& pos0,
        const LLVector2& tex0,
        const LLVector3& pos1,
        const LLVector2& tex1,
        const LLVector3& pos2,
        const LLVector2& tex2)
{
        LLVector3 rx0( pos0.mV[VX], tex0.mV[VX], tex0.mV[VY] );
        LLVector3 rx1( pos1.mV[VX], tex1.mV[VX], tex1.mV[VY] );
        LLVector3 rx2( pos2.mV[VX], tex2.mV[VX], tex2.mV[VY] );
       
        LLVector3 ry0( pos0.mV[VY], tex0.mV[VX], tex0.mV[VY] );
        LLVector3 ry1( pos1.mV[VY], tex1.mV[VX], tex1.mV[VY] );
        LLVector3 ry2( pos2.mV[VY], tex2.mV[VX], tex2.mV[VY] );

        LLVector3 rz0( pos0.mV[VZ], tex0.mV[VX], tex0.mV[VY] );
        LLVector3 rz1( pos1.mV[VZ], tex1.mV[VX], tex1.mV[VY] );
        LLVector3 rz2( pos2.mV[VZ], tex2.mV[VX], tex2.mV[VY] );
       
        LLVector3 r0 = (rx0 - rx1) % (rx0 - rx2);
        LLVector3 r1 = (ry0 - ry1) % (ry0 - ry2);
        LLVector3 r2 = (rz0 - rz1) % (rz0 - rz2);

        if( r0.mV[VX] && r1.mV[VX] && r2.mV[VX] )
        {
                LLVector3 binormal(
                                -r0.mV[VZ] / r0.mV[VX],
                                -r1.mV[VZ] / r1.mV[VX],
                                -r2.mV[VZ] / r2.mV[VX]);
                //binormal.normVec();
                return binormal;
        }
        else
        {
                return LLVector3( 0, 1 , 0 );
        }
}
为什么要用纹理UV 去求顶点副法线?什么数学原理?

0

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-4-23 13:50:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

和bump map类似或者就是,用图像文件格式的颜色值来存储顶点的副法线信息.

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2007-4-23 13:52:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

这个是关于 已知三角形三个顶点及其纹理坐标的时候,求出切空间的问题,网上发现http://blog.csdn.net/soilwork/archive/2006/12/30/1468860.aspx
这个链接有详细的介绍,不过现在还看不明白。

0

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-4-23 16:02:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

引用: ----    Tangent space在Bump Map中有着重要作用,通常需要把灯光转换到tangent space进行计算。对由参数方程计算出的规则曲面(比如,球体,圆环)来说,很容易通过方程计算出tangent space,但对任意的三角形网格来说,则没有那么简单。。。。。

这么说确实是Bump Map,BumpMap用图像上的像素点信息存储了该点(像素点不是顶点)的法线信息(注意是在pixelshader里用,不是vertexshader里,是对每个像素点操作),用uv是需要用tex2D找出这个像素点信息,然后把像素信息转换成法线,然后在tangent space空间中,用已经转换到tangent space空间中的光方向,视角方向,做各种操作,可以改变这个像素点的颜色值来造成凹凸阿,反光阿什么的效果,实际上并没有真的凹凸出来,也就是顶点的位置没变,是像素变了造成的假像。

刚学bump map,呵呵,不知道说的对不对。

0

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-4-23 16:08:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

要用到uv,是因为纹理这点上的颜色信息,和求出的副法线方向有关系的。

0

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-4-23 16:13:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

D3DXComputeTangentFrameEx这个函数可以直接求,如果只是用的话.

0

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-4-23 16:15:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

我也看不明白,哈哈.

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2007-4-23 16:36:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

引用: ----    注意,P10在世界坐标中的方向和C10在纹理空间中的方向是一致的(这一点确实比较抽象,偶画图研究了好久才弄明白-_-),同样,P­20和C20也是如此,发现这一点很重要,可以说是整个计算的基石。
p10和C10在两个坐标空间里的向量,一个三维,一个2维,怎么比较方向呢。。

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2007-4-23 16:37:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

呵呵。。。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-4-23 19:53:00 | 显示全部楼层

Re:请问为什么要用纹理UV 去求副法线?严重不明白。。

去看<<Mathematics for 3D Game Programming and Computer Graphics>>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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