zoukankan      html  css  js  c++  java
  • D3D中关于各个空间的介绍

    最近在看几何着色器,才发现自己对顶点的变换过程又忘光了,赶紧找出书来复习…

    下面是我的一些笔记

    一、观察空间

    为了生存场景的2D图像,在场景中放置一个摄像机,摄像机指定了用户能看到的区域。在摄像机上附加局部坐标系,称之为观察空间或者摄像机空间。附加的坐标系,我们一如既往使用矩阵表示坐标系。最后通过操纵矩阵从而操纵摄像机。

    观察空间到世界空间的变换矩阵(别看错了~)是这样子的

    W = Ux , Uy , Uz , 0,

           Vx , Vy , Vz , 0,

           WX, Wy, Wx, 0,

           Qx , Qy , Qz , 1

    那么从世界空间到观察空间的矩阵就是W的逆矩阵啦。

    W-1  = Ux , Vx , Wx , 0,

                Uy , Vy , Wy , 0,

                Uz,  Vz,  Wz, 0,

                Q·u , Q·v , Q·w , 1

    Q系列是摄像机的pos,U是摄像机的x轴,V是摄像机的y轴,W是摄像机的z轴的齐次坐标。

    那为什么要进行坐标变换呢?千辛万苦把世界坐标变成观察坐标,这个嘛,我也不知道。(据书里记载,使用观察坐标描述顶点,比使用世界坐标描述顶点,要方便得多)构造出来变换矩阵之后,只要将相应的世界坐标乘与变换矩阵,就完成了不同空间的坐标变换了。

    其实说了那么多,只要用一条D3D函数就可以实现了…

    提供观察点,摄像机位置,摄像机坐标系的向上方向即可构造出观察矩阵。

    image

    二、投影与齐次裁剪空间

    在上面定义了摄像机之后,还需要定义合理的摄像机取景范围。可以使用“平头截体”完成这个功能。所谓的平头截体就是定义能看到的最远距离,最近距离,视域角。之后计算三角形,把摄像机的空间的坐标转化为投影窗口的坐标。具体过程如下图:

    image

    把y点变成y’点 x点变成x'点。深度值z保留并规范化,为下面阶段的深度操作使用。(都是很基础的平面几何知识)

    注意:在进行坐标变换的时候,我们使用规范化设备(NDC)坐标。中间还有很多矩阵变换我不想列出来了, = =其实说了那么多,一个D3D函数就可以搞定了..

    image

    image

    使用该条函数后,执行观察投影变换,规范化坐标,透视除法步骤一步到位。

    三、世界空间,局部空间

    这两个空间是最好理解的,所以不写那么多笔记了..

    世界矩阵

    W = Ux , Uy , Uz , 0,

           Vx , Vy , Vz , 0,

           WX, Wy, Wx, 0,

           Cx , Cy , Cz , 1

    C系列是物体局部坐标系的pos,U是物体局部坐标系的x轴,V是物体局部坐标系的y轴,W是物体局部坐标系的z轴的坐标。

  • 相关阅读:
    基于WINCE6.0+S3C2443的camera驱动
    WINCE下基于SL031的RFID功能的实现
    WINCE6.0+S3C2443下的activesync问题
    WINCE6.0+S3C2443下WatchDog学习
    错误的抉择,痛悔
    WINCE5.0下SQL server compact版本更新
    做生意和打工的区别
    WINCE基于MC8630的3G模块的控制和加载
    Xml Tips
    VB.NET and C# Comparison
  • 原文地址:https://www.cnblogs.com/CAION/p/2950291.html
Copyright © 2011-2022 走看看