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必须的数学基础的更多相关文章

  1. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  2. Unity Shader入门精要读书笔记(二)UnityShader概述

    第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...

  3. GitHub入门与实践 读书笔记三:(1)GitHub账户注册教程

    第一步:进入GitHub官网,官网地址:https://github.com/ 第二步:点击Sign up for GitHub 1.昵称一栏:每次在你输入昵称之后,都会检查是否已经被注册.如果被注册 ...

  4. Unity Shader入门精要学习笔记 - 第10章 高级纹理

    转载自 冯乐乐的 <Unity Shader入门精要> 立方体纹理 在图形学中,立方体纹理是环境映射的一种实现方法.环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层 ...

  5. Unity Shader入门精要学习笔记 - 第9章 更复杂的光照

    转载自 冯乐乐的<Unity Shader入门精要> Unity 的渲染路径 在Unity里,渲染路径决定了光照是如何应该到Unity Shader 中的.因此,如果要和光源打交道,我们需 ...

  6. Unity Shader入门精要学习笔记 - 第8章 透明效果

    转载自 冯乐乐的 <Unity Shader入门精要> 透明是游戏中经常要使用的一种效果.在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道.当开启透明混合后,当一个物体被渲染 ...

  7. Unity Shader入门精要学习笔记 - 第7章 基础纹理

    转自 冯乐乐的 <Unity Shader 入门精要> 纹理最初的目的就是使用一张图片来控制模型的外观.使用纹理映射技术,我们可以把一张图“黏”在模型表面,逐纹素地控制模型的颜色. 在美术 ...

  8. Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照

    转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...

  9. Unity Shader入门精要学习笔记 - 第4章 学习 Shader 所需的数学基础

    摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐 ...

随机推荐

  1. JNI_Z_03_类中的字段和方法的签名

    1. Java类型 相应的签名 例子 boolean Z byte B char C short S int I long L float F double D void V Object L用&qu ...

  2. GBDT 总结文档

    在做阿里的o2o优惠券预测的时候学习了GBDT.听闻GBDT的威力,自然要学习学习. 接下来从以下几个方面记录下我对于GBDT的理解. GBDT的用途,优势 GBDT的结构和算法流程 GBDT如何训练 ...

  3. spring3: AOP 之 通知参数

    前边章节已经介绍了声明通知,但如果想获取被被通知方法参数并传递给通知方法,该如何实现呢?接下来我们将介绍两种获取通知参数的方式. 使用JoinPoint获取:Spring AOP提供使用org.asp ...

  4. poj3468线段树标记永久化

    #include<map> #include<set> #include<list> #include<cmath> #include<queue ...

  5. Mysql的锁机制——待写

    发酵独守空房飞杀戮空间爱的色放

  6. C语言小知识点汇集

    1. 三元表达式“?:”冒号两边的两个操作数类型必须一致. 2. 枚举变量的sizeof值同int型一样为4. 3. 为了消除不必要的计算 &&两侧的表达式,当左侧即第1个表达式不成立 ...

  7. MySQL乱码问题及字符集实战

    mysql> create database oldboy;Query OK, 1 row affected (0.01 sec) mysql> mysql> mysql> s ...

  8. mooseFS学习篇

    官方网站:http://www.moosefs.org/ About MooseFS MooseFS is a fault tolerant, network distributed file sys ...

  9. sql日期函数总结

    sql 时间转换格式 convert(varchar(10),字段名,转换格式)   convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_ ...

  10. NAVagationController

    UINavigationController为导航控制器,在iOS里经常用到. 1.UINavigationController的结构组成 UINavigationController有Navigat ...