zoukankan      html  css  js  c++  java
  • Unity Shader入门精要读书笔记(三)Shader必须的数学基础

    Xyz三维坐标系如下:左手坐标系

     

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

     

    右手法则判断叉乘的结果的方向;

    正交矩阵(单位互相垂直的基矢量构成正交矩阵)具有逆与转置一致性;

    列矩阵运算CBAv和行矩阵的运算vATBTCT一致;

    平移变换不是一个线性变换;

    仿射变换合并了线性变换和平移变换,在齐次坐标空间中进行;

    纯平移、纯旋转和纯放缩的变换称为基础变换,那么一个齐次坐标矩阵如下:

     

    其中M表示缩放和旋转,t表示平移,0表示0,1表示1

    为什么呢?

     

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

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

     

    如果是正交矩阵的话,可以轻易地得到反推的矩阵(读取行即可);

    [正交矩阵] 利用试探法写MA->B,已知B空间的基矢量是xbybzb(用A来描述),那么xb(用A系来描述Bx基矢量)经过AB的转换后,得到的应该是100

     

    模型变换:从模型空间到世界空间;

    先缩放、后旋转、后平移;

    摄像机的放置:缩放(不缩放)、旋转(镜头的旋转)、平移(镜头的平移),即摄像机有一个transform;由于观察空间是一个右手系,所以对z进行取反,即和[1000; 0100 ;00-10 ; 0001]相乘,得到观察变换矩阵,也就是以镜头位置为原点,以镜头指向为坐标轴(其中镜头后方为+z)的坐标系;

    齐次裁剪空间,这个空间的变换矩阵称为裁剪矩阵或者投影矩阵;

     

    利用三角形关系和FOV可以知道近裁平面和远裁平面的高度

     

     

     

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

     

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

     

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

     

     

    所有不满足xyz在±1以内的,都被裁剪;

    透视除法:就是用w分量去除以xyz分量(限定在了-11的立方体内)

     

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

     

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

     

    其中clipx是裁剪空间中的xclipw是裁剪空间中的w

     

    为了将法向量从A空间变换到B空间,直接和Mab相乘是不对的。变换到B切线方向记为TbNb记为变换到B的法线方向,那么满足点积为零的约束:(我们希望求得G表示法线从AB的变换矩阵)

    如果Mab是正交矩阵(即旋转),那么直接和Mab相乘是正确的,如果带有统一放缩k,那么

  • 相关阅读:
    聊天的时间显示
    Android下Affinities和Task
    android Notification 的使用
    Android Notification使用及取消
    类似微信发图片的样式
    Delphi---TServerSocket和TClientSocket发送和接收大数据包
    使用拷贝文件测试(BufferedInputStream,FileInputStream)
    android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
    怎样成为PHP 方向的一个合格的架构师
    mac 查看某个文件夹下所有隐藏文件(夹)的大小
  • 原文地址:https://www.cnblogs.com/JackSamuel/p/7272084.html
Copyright © 2011-2022 走看看