TANGENT_SPACE_ROTATION 宏 相当于嵌入如下两行代码:

float3 binormal = cross( v.normal, v.tangent.xyz ) * v.tangent.w;

float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal );

也就是构造出 tangent space 的坐标系, 定义转换world space的向量到tangent space的rotation 矩阵。

TANGENT_SPACE_ROTATION这行代码之后,就可以用rotation这个代表从世界坐标到切线空间的矩阵了。不过要记得TANGENT_SPACE_ROTATION后面要加分号“;”的,比如:

struct v2f
{
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
float3 lightDir:TEXCOORD1;
};

v2f vert (appdata_full v)
{
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);

o.uv=v.texcoord.xy;

TANGENT_SPACE_ROTATION;

o.lightDir= mul(unity_WorldToObject, _WorldSpaceLightPos0).xyz;//Direction Light
o.lightDir=mul(rotation,o.lightDir);
return o;
}

float4 frag(v2f i):COLOR
{
float3 N=UnpackNormal(tex2D(_BumpMap,i.uv));
float diff=max(0,dot(N,i.lightDir));
float4 c=_LightColor0diff;
return c
2;
}

原文转自:https://www.cnblogs.com/laoyueblogs/p/13782797.html

TANGENT_SPACE_ROTATION的解释相关推荐

  1. TCP三次握手和四次挥手的解释

    基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...

  2. java 解释型和编译型

    编译型语言和解释型语言 编译型语言: 举一个恰当的例子来理解,一本汉语的书,需要翻译成英文的书来帮助外国人理解,一种就是把正本书翻译完,然后给到外国人来阅读,这种方式就相当于编程中的编译型. 解释型: ...

  3. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  4. (康托展开解释)+ NYOJ 139 我排第几个

    描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? 输入 第一行有一个整数n(0<n& ...

  5. 具体解释可变參数列表

    可变參数   至少有一个參数 比如:void add(int a,- ){} 例题  模拟printf()函数 #include <stdio.h> #include <stdarg ...

  6. 状态压缩dp(hdu2662)(我综合了一个人的解释和另一个人的代码)

    hoj 2662 大概题意是:有一个n*m的棋盘,在这个棋盘里边放k个旗子,要求每一行每一列都不能存在一对旗子相邻,问最后总共的方案数. 这道题一看状态非常多,就一定是状压.怎么状压呢?这又是个问题. ...

  7. java具有自动无用内存回收_Java语言程序设计(一)试卷及答案解释

    Java语言程序设计(一)试卷及答案解释 本试卷共6页,满分l00分,考试时间l50分钟. 第一部分选择题 一.单项选择题:本大题共l0小题,每小题l分,共10分.在每小题列出的备选项中只有一项是最符 ...

  8. jquery.datatable能返回数据绑不上_地磁场可以影响人体机能吗?解释有多种,但都不理想...

    信鸽辨别方向的能力特别强,即使上海的信鸽带到几千公里放飞,它仍然会飞回上海.路途中就是碰到狂风暴雨,它也不会迷失方向. 为什么它有这么大的辨别方向的本领呢?科学家对信鸽进行研究,做了这样一个有趣的实验 ...

  9. linux分区通俗讲解,linux硬盘分区基础及设备号的解释

    要了解linux分区,需要先明确一下主分区.扩展分区和逻辑分区这三个概念. 分区概念 主分区:一块物理硬盘上可以被独立使用的一部分,一个硬盘最多可以有4个主分区. 扩展分区:为了突破一个物理硬盘只能有 ...

  10. python采用解释方式执行_Python初学(一)

    <本系列性文章是根据一篇python教程来写的,如有侵权请联系管理员删除文章> 在学习Python之前要先知道什么是程序设计语言,也就是程序设计语言的概述是什么? 程序设计语言的概述: 程 ...

最新文章

  1. HDLBits 系列(23)3 输入的 LUT
  2. Error in configuration process解决方法
  3. HTMLCollection元素的For循环
  4. CodeFx: 微软一站式开发技术框架解决方案 2009-7-30 新增sample code简介
  5. List-ArrayList 使用
  6. python 批量更换图片格式脚本
  7. 用Windows组件库文件快速部署Visual C
  8. sales organization mapping logic debug
  9. Linux IPC实践(12) --System V信号量(2)
  10. 康轩职教计算机应用基础课件,《Excel中IF函数的应用-机器人任务》计算机应用基础职教课件.ppt...
  11. linux分支结构,实验四 Shell脚本中的分支结构
  12. 如何注册申请 Google AdSense
  13. 20162314 Experiment 3 - Sorting and Searching
  14. IDC:无线数字化转型持续进行 第二季度全球企业WLAN市场强劲增长
  15. 第六章-深入理解类(一)
  16. 贝叶斯决策及效用函数
  17. Java代理(Proxy)模式
  18. oracle优化distinct,oracle 索引优化之distinct
  19. APP应用平台有哪些?
  20. 构造不可测集-Vitalie Set

热门文章

  1. Aix平台打开异步io需要fileset支持
  2. c++运行错误: string subscript out of range
  3. 矩阵和向量的范式(Norms for Vectors and Matrices)
  4. 使用fail2ban解决暴力破解问题
  5. js实现微信中下载APP
  6. 关于lcm,gcd的一些性质
  7. 基于微信小程序的毕业设计题目(30)php物业维修报修小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  8. plc的毕业设计冷门题目_PLC毕业设计----PLC毕业设计题目汇总
  9. BDrate、BDBR、BDPSNR的计算原理和程序
  10. 每天一个linux命令(33):atq命令