zoukankan      html  css  js  c++  java
  • (转)对D3DXVec3Project 和D3DXVec3UnProject的认识

    一下是我的学习笔记:

    D3DXVec3project//将3D物理坐标点变到SURFACE的2D点
    现在我来解释一下
    1.3D物理坐标,看例子
    声明 点 A( a,b,c);
    DEVICE->SETTRANSFORM( WORLD,MATRIX)
    DRAW (A)
    此时A(a,b,c)为物理坐标
    若MATRIX为单位矩阵那么A为世界坐标的点


    什么叫SURFACE的2D点
    是指每个程序中都有个MAIN SURFACE (DIRECTDRAW 里的主绘图页相似);
    现在的SURFACE是指MAINSURFACE的总体或者小部分;

    typedef struct D3DVIEWPORT9 {
         DWORD X;
         DWORD Y;
         DWORD Width;
         DWORD Height;
         float MinZ;
         float MaxZ;
    }

    结构体中指明了此目标SURFACE 是MAINSURFACE的哪一部分
    一般情况是真个MAINSURFACE即目标SURFACE,这个结构体此时的设置为
    {
    0,
    0,
    MAINSURFACE.WIDTH,
    MAINSURFACE.HEIGHT,
    0.0,
    1.0
    }

    此函数变换的3D坐标的Z值为0;


    /////////与之相反(但是又不完全相反)的是
    D3DXVec3Unproject

    是将目标SURFACE变到3D物理坐标
    但是此时的物理坐标并不是以前那个对应的3D屋里坐标了
    而是——

    视截体近面或者远体面中的3D坐标的物理坐标---这句话的理解是

    :所求 3DPOS= (3D世界坐标点与EYE(摄影机的点都是世界坐标点不受SET WORLD 影响)的连线    )与近或远视
    截面(当然是世界坐标)的焦点 ,再然后转换到物理坐标(即为结果)


    CSDN上那个家伙估计是
    先得到的2D坐标然后一转成里近的面里而其近面为0;
  • 相关阅读:
    LintCode-Search for a Range
    LintCode-Serialization and Deserialization Of Binary Tree
    LeetCode-Reverse Words in a String
    LeetCode-Reorder List
    LeetCode-Word Break
    LeetCode-Word Ladder
    LeetCode-Valid Palindrome
    cf div2 237 D
    POJ 1759
    cf div2 238 D
  • 原文地址:https://www.cnblogs.com/lancidie/p/1845862.html
Copyright © 2011-2022 走看看