Unity Shader入门精要读书笔记(三)Shader必须的数学基础
Xyz三维坐标系如下:左手坐标系

但是摄像机观察空间则是采用右手系:

右手法则判断叉乘的结果的方向;
正交矩阵(单位互相垂直的基矢量构成正交矩阵)具有逆与转置一致性;
列矩阵运算CBAv和行矩阵的运算vATBTCT一致;
平移变换不是一个线性变换;
仿射变换合并了线性变换和平移变换,在齐次坐标空间中进行;
纯平移、纯旋转和纯放缩的变换称为基础变换,那么一个齐次坐标矩阵如下:

其中M表示缩放和旋转,t表示平移,0表示0,1表示1;
为什么呢?

从C空间变到P空间的矩阵:

其中Oc是选取的原点,xcyczc是C下的P的基矢量(不一定要是单位的);
对于矢量从C空间变到P空间中,则只需要:

如果是正交矩阵的话,可以轻易地得到反推的矩阵(读取行即可);
[正交矩阵] 利用试探法写MA->B,已知B空间的基矢量是xbybzb(用A来描述),那么xb(用A系来描述B的x基矢量)经过A到B的转换后,得到的应该是100;

模型变换:从模型空间到世界空间;
先缩放、后旋转、后平移;
摄像机的放置:缩放(不缩放)、旋转(镜头的旋转)、平移(镜头的平移),即摄像机有一个transform;由于观察空间是一个右手系,所以对z进行取反,即和[1000; 0100 ;00-10 ; 0001]相乘,得到观察变换矩阵,也就是以镜头位置为原点,以镜头指向为坐标轴(其中镜头后方为+z)的坐标系;
齐次裁剪空间,这个空间的变换矩阵称为裁剪矩阵或者投影矩阵;
利用三角形关系和FOV可以知道近裁平面和远裁平面的高度


Aspect是宽高比,那么从观察空间(摄像机做原点)到裁剪空间为:

经过裁剪变换后,所有不满足xyz限定在±w内的片元都被丢弃;

正交投影的裁剪变换如下:


所有不满足xyz在±1以内的,都被裁剪;
透视除法:就是用w分量去除以xyz分量(限定在了-1到1的立方体内)

正交投影的齐次除法就是除以1:

在Unity中屏幕空间左上角是原点,右下角是pixelW和pixelH,那么就有最后一个从齐次除法后到屏幕映射:

其中clipx是裁剪空间中的x,clipw是裁剪空间中的w;

为了将法向量从A空间变换到B空间,直接和Mab相乘是不对的。变换到B切线方向记为Tb,Nb记为变换到B的法线方向,那么满足点积为零的约束:(我们希望求得G表示法线从A到B的变换矩阵)
如果Mab是正交矩阵(即旋转),那么直接和Mab相乘是正确的,如果带有统一放缩k,那么;
Unity Shader入门精要读书笔记(三)Shader必须的数学基础的更多相关文章
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- Unity Shader入门精要读书笔记(二)UnityShader概述
第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...
- GitHub入门与实践 读书笔记三:(1)GitHub账户注册教程
第一步:进入GitHub官网,官网地址:https://github.com/ 第二步:点击Sign up for GitHub 1.昵称一栏:每次在你输入昵称之后,都会检查是否已经被注册.如果被注册 ...
- Unity Shader入门精要学习笔记 - 第10章 高级纹理
转载自 冯乐乐的 <Unity Shader入门精要> 立方体纹理 在图形学中,立方体纹理是环境映射的一种实现方法.环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层 ...
- Unity Shader入门精要学习笔记 - 第9章 更复杂的光照
转载自 冯乐乐的<Unity Shader入门精要> Unity 的渲染路径 在Unity里,渲染路径决定了光照是如何应该到Unity Shader 中的.因此,如果要和光源打交道,我们需 ...
- Unity Shader入门精要学习笔记 - 第8章 透明效果
转载自 冯乐乐的 <Unity Shader入门精要> 透明是游戏中经常要使用的一种效果.在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道.当开启透明混合后,当一个物体被渲染 ...
- Unity Shader入门精要学习笔记 - 第7章 基础纹理
转自 冯乐乐的 <Unity Shader 入门精要> 纹理最初的目的就是使用一张图片来控制模型的外观.使用纹理映射技术,我们可以把一张图“黏”在模型表面,逐纹素地控制模型的颜色. 在美术 ...
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...
- Unity Shader入门精要学习笔记 - 第4章 学习 Shader 所需的数学基础
摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐 ...
随机推荐
- 报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus
报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus ...
- java Graphics2d消除锯齿,使字体平滑显示
Java 2D API 提供的文本处理功能进行美化.Java 2D API 的文本功能包括: 使用抗锯齿处理和微调(hinting)以达到更好的输出质量 可以使用系统安装的所有字体 可以将对图形对象的 ...
- python time 和 datetime 模块的简介
时间处理 time 和 datetime import timeimport datetimeprint time.time() #时间戳显示为1508228106.49print time.strf ...
- Codeforces Round #451 (Div. 2)
水题场.... 结果因为D题看错题意,B题手贱写残了...现场只出了A,C,E A:水题.. #include<bits/stdc++.h> #define fi first #defin ...
- mysql的bin或者sbin目录可执行文件
一. mysql服务和myql服务启动程序 1. mysqld mysqld就是mysql server,负责管理对mysql数据的访问. 当mysql server启动后,它会监听来自客户端的网络连 ...
- JAM计数法(模拟)
题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字 ...
- 配置 Web 组件服务器 IIS 证书
用 IIS 6 配置 Web 组件证书(对于 Windows Server 2003) 使用 IIS 管理器向 Web 组件服务器分配证书.对合并池配置中的 Standard Edition ...
- Struts04---命名空间的查询顺序以及默认执行的Action
01.创建login.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- 不用配置 , 快速搭建react环境
链接 create-react-app react-webpack-generators react-cli
- 持久层框架:MyBatis 3.2(2)
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得.SqlSessi ...