各位高手,初学D3D。
小弟遇到个问题。我建立个对话框,800 * 600
我想把坐标系原点设置在屏幕左上角,每一个像素是一个单位,就和GDI类似。
我该怎样建立坐标系。世界矩阵、观察矩阵、投影矩阵应该怎样设置、变换?
找了好多书,都没有相应的内容。不是设成 D3DFVF_XYZRHW,好像这样不能进行矩阵变换了。请各位高手指教,谢谢!

解决方案 »

  1.   

    为什么要这么做呢……即使你把坐标系弄成那样,操作也不一样的,而且也很难精确的实现。D3D默认的情况不是更加符合数学吗?想用D3D实现2D操作的话,使用D3DFVF_XYZRHW,矩阵变换自己计算。学3D的话,记住2D的数学原理,忘记GDI的操作方式吧。
      

  2.   

    另外如果只是要近似的话,可以这样设置,应该是可行的。世界矩阵:
    世界矩阵负责将坐标系的原点变换到屏幕左上角
    D3DXMatrixTranslation(&g_WorldMatrix,-400,-300,0);观察矩阵:
    设置视点:g_Eye(0,0,-1);观察方向LookAt(0,0,1);向上方向Up(0,1,0)
    D3DXMatrixLookAtLH(&g_ViewMatrix,&Eye,&LookAt,&Up);投影矩阵:
    投影矩阵设置为平行投影:
    D3DXMatrixOrthoLH(&g_ProjMatrix,800,600,0,100);
      

  3.   

    恩 谢楼上回帖。
    不过我说的这种似乎能实现。
    http://gpwiki.org/index.php/HGE:Tutorials:Video
    这个 HGE 2D游戏引擎就是这样的,里面的设置也是D3DFVF_XYZ。
    因为初学,所以代码看不太明白,算法不太清楚。
    有兴趣您可以看看。
      

  4.   

    啊……早说是要用D3D制作2D程序嘛,我还以为你要用D3D模拟GDI系统画点画直线什么的^^D3D里面可以用D3DXSprite来实现,用法和那个差不多的,你可以在网上搜索一下“D3D 2D精灵”寻找更多的资料^^