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. 报错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 ...

  2. java Graphics2d消除锯齿,使字体平滑显示

    Java 2D API 提供的文本处理功能进行美化.Java 2D API 的文本功能包括: 使用抗锯齿处理和微调(hinting)以达到更好的输出质量 可以使用系统安装的所有字体 可以将对图形对象的 ...

  3. python time 和 datetime 模块的简介

    时间处理 time 和 datetime import timeimport datetimeprint time.time() #时间戳显示为1508228106.49print time.strf ...

  4. Codeforces Round #451 (Div. 2)

    水题场.... 结果因为D题看错题意,B题手贱写残了...现场只出了A,C,E A:水题.. #include<bits/stdc++.h> #define fi first #defin ...

  5. mysql的bin或者sbin目录可执行文件

    一. mysql服务和myql服务启动程序 1. mysqld mysqld就是mysql server,负责管理对mysql数据的访问. 当mysql server启动后,它会监听来自客户端的网络连 ...

  6. JAM计数法(模拟)

    题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字 ...

  7. 配置 Web 组件服务器 IIS 证书

    用 IIS 6 配置 Web 组件证书(对于 Windows Server 2003)     使用 IIS 管理器向 Web 组件服务器分配证书.对合并池配置中的 Standard Edition ...

  8. Struts04---命名空间的查询顺序以及默认执行的Action

    01.创建login.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  9. 不用配置 , 快速搭建react环境

    链接 create-react-app react-webpack-generators react-cli

  10. 持久层框架:MyBatis 3.2(2)

    每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得.SqlSessi ...