登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: [Direct3D]D3D中D3DFVF_XYZ和D3DFVF_XYZRHW的区别[zt]     [回主站]     [分站链接]
标题
[Direct3D]D3D中D3DFVF_XYZ和D3DFVF_XYZRHW的区别[zt]
clq
浏览(1) + 2008-12-20 22:08:29 发表 编辑

关键字:

D3D中D3DFVF_XYZ和D3DFVF_XYZRHW的区别

http://www.cppblog.com/eros/archive/2008/07/14/56128.html

学习D3D9的时候遇到灵活顶点格式(FVF)中D3DFVF_XYZRHW和D3DFVF_XYZ之间差异而引起的问题。
参看了同是C++博客的一篇博文,其分析如下:
在顶点结构体中没有RHW时,Direct3D将执行视、投影、世界等变换以及进行光线计算,之后你才能在窗口中得到你所绘制的物体。当顶点结构体中有 RHW时,就像上面那段英文所述,告知Direct3D使用的顶点已经在屏幕坐标系中了,不再执行视图、投影、世界等变换和光线计算,因为 D3DFVF_XYZRHW标志告诉它顶点已经经过了这些处理,并直接将顶点进行光栅操作,任何用SetTransform进行的转换都对其无效。不过这时的原点就在客户区的左上角了,其中x向右为正,y向下为正,而z的意义已经变为z-buffer的象素深度。
值得注意的是D3DFVF_XYZRHW和D3DFVF_XYZ、D3DFVF_NORMAL不能共存,因为后两个标志与前一个矛盾。在使用这种顶点时,系统需要顶点的位置已经经过变换了,也就是说x、y必须在屏幕坐标系中,z必须是z-buffer中的象素深度,取值范围:0.0-1.0,离观察者最近的地方为0.0,观察范围内最远可见的地方为1.0。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
结合我自己的试验,有一些发现,记录下来以备忘。
D3DFVF_XYZ默认的用户区中心坐标是(0,0),而D3DFVF_XYZRHW是左上角为(0,0)
用D3DFVF_XYZ默认的为非光照的,而D3DFVF_XYZRHW是高洛德光照。
当使用D3DFVF_XYZ时,要设置渲染状态:
g_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE)
而且要设置观察矩阵和投影矩阵,例如:

D3DXMATRIX matProj;
D3DXMATRIX matView;

// Create and set the projection matrix
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4.0f, 1.33333f, 1.0f, 1000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);

// Create and set the view matrix
D3DXMatrixLookAtLH(&matView, \
&D3DXVECTOR3(0.0f, 0.0f, -500.0f), \
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), \
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
否则没有渲染结果。

clq
2008-12-20 22:09:31 发表 编辑

感觉 D3DFVF 的顶点类型还真是复杂。

总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1