首页 > [图形学]切向空间(Tangent Space)

[图形学]切向空间(Tangent Space)

2009年3月17日
阅读评论 发表评论

1    这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这里发一点关于其中一个用来完成凹凸贴图计算中将光向量转向顶点所在的切向量的细节,这个在当时的例子中是通过API实现的,这里简单描述一下原理,以下翻译自OpenGL.org中关于Tangent Space的阐述。 

     为了能够正确的完成凹凸贴图中偏移的计算,光向量L必须转换到切向空间中,所谓的切向空间包括3个轴:T,B和N。其中T是该点切线向量,平行于参数曲面上S方向上的增量(我理解应该就是在多边形曲面上的切向方向吧);N是该点法线向量,垂直于局部平面;B(Binormal)是副法线,同时垂直于N和T,并且和T确定了切平面。这三个向量确定的一个空间坐标系就是传说中的切空间,如果所处的表面是曲线,那么切空间在每一个顶点上都应该是变化的。

    既然光源必须转换至表面中每一个顶点的切空间,那么下面的问题就只有一个,如何能够正确的计算出每一个顶点的切空间呢?我们可以使用顶点的法线向量作为N;然后使用模型的局部坐标系中的S方向上的增量(模型空间中材质的S轴方向上)作为切线方向(这一块还是不太明白他的意思,用增量的极限来表示切线没有错,但是怎么实现的好像没说明白,可能是我还处于初级阶段吧,呵呵,不过在D3D中是有可以仅通过法线向量来计算切线空间的API的);然后B可以通过N和T的叉乘计算求得,单位化后的三个向量可以组成一个旋转矩阵:

    3  

    T,B,N分别作为空间内的X,Y,Z轴。它可以将向量从局部空间坐标系转换至切空间坐标系,如果T,B,N是在观察空间内定义的,那么就可以使用它来完成观察空间到切空间的转换。在非平整的表面上,每一个顶点所对应的矩阵自然也都是不同的。

    有了这个矩阵我们就可以将光向量变换到每个顶点自己的切空间内了,来计算光给每个顶点的漫反射和镜反射的不同影响了。

    这就是在各种贴图技术中很重要的切空间了~。

    2

更多相关:

  • 因为要设计AR系统,但是纠结是用cube还是Sphere mapping,cube mapping比较熟悉,但是网上关于sphere mapping的资料少之又少,只怪智商太低太原理的又看不懂,所以花了很长时间,主要是靠下面几个链接和那篇论文理解透的。总之,还是用Cube吧。。。。 参考资料: http://www.twinkli...

  • 强化学习(六) - 连续空间中的强化学习6.1 连续空间中的强化学习6.2 离散空间和连续空间6.3 离散化实例:小车上山6.3.1 相关程序6.3.2 程序注解(1) 环境测试(2) 离散化(3) 模型训练(4) 模型优化...

  • JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地管理代码, 就像 .NET 的命名空间 (namespace) 和 Java 的包 (package) 一样. 为什么需要命名空间...

  • 线元决定空间,通过定义时空线元,获得闵氏空间:     转载于:https://www.cnblogs.com/YouXiangLiThon/p/9907552.html...

  • sql数据库系统表,常用的(sysobjects,sysindexes,sysindexkeys,SYSCOLUMNS,SYSTYPES 及更多解释说明): https://docs.microsoft.com/zh-tw/previous-versions/sql/sql-server-2012/ms177596(v%3dsql....

  • ----------siwuxie095             1、概述 2、栈空间 3、堆空间          1、概述            (布尔类型如果作为单个变量存储数据将占用 4 个字节,如果作为数组中的某个元素只占用 1 个字节)                〔计算机存储数据分为三个空间:寄存器、栈空间、堆空间。...

  • 知识补充: 顶点数组对象:Vertex Array Object,VAO顶点缓冲对象:Vertex Buffer Object,VBO索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO 蓝色部分代表的是我们可以注入自定义的着色器的部分。 图形渲染管线的第一个部分是顶...

  • dijkstra是单源点最短路算法。 借图:   其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。 初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径长度。D...