DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST

转载 2012年03月21日 06:07:45
 转自:

http://blog.csdn.net/liminled/article/details/6674882

DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST

分类: DirectX 3D 214人阅读 评论(0) 收藏 举报

D3DFVF_XYZRHW:

之前都没有深入了解D3DFVF_XYZRHW,昨天开始认真做了下实验,D3DFVF_XYZRHW小小参数,包含了挺多东西的:

DirectX and XNA解释:

  1. Vertex fromat includes the position of a transformed vertex.This flag cannot be used with the D3DFVF_XYZ or D3DFVF_NORMAL flags  

D3DFVF_XYZRHW该格式:指示使用sizeof(float) * 4的空间。


也就是说D3DFVF_XYZRHW所输入的数值就是屏幕空间的坐标值,不再需要进行坐标转换。D3DFVF_XYZRHW不支持与D3DFVF_XYZ、D3DFVF_NORMAL共同使用。

RHW这个值的说明:

  1. If you use D3DFVF_XYZRHW, then your vertex format needs to have 4 floats in it, for x, y, z and rhw. X and Y are used to define a vertex position in 2D space,   
  2. Z is  ignored (I think, it may be used for fog and such, but I don't recall just now - I always set it to 0.0f), and rhw is the Reciprocal of Homogenous W - which is   
  3. basically 1 / the depth of the vertex.  
  4.   
  5. [1] RHW表示投影空间中顶点所在的齐次点(x,y,z,w)(homogeneous point)的w坐标的倒数(reciprocal)。  
  6.   
  7. rhw就是w的倒数,可以认为w是一个系数,用以将一个n次元空间扩展到n+1次元空间,这里重要的就是齐次坐标的概念,当w为1的时候,就是在齐次空间中的原n次元空间,  
  8. 当w小于1时,其影射到n次元空间时将被放大,当w大于1时,影射到n次元空间将会被缩小...,当w等于0时,表示一个无限远点...  

使用D3DPT_LINELIST实验Z、RHW值在D3DFVF_XYZRHW中起的作用:

  1. D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)  
  2.   
  3. struct CUSTOMVERTEX  
  4. {  
  5.      float x, y, z, rhw;  
  6.      DWORD color;  
  7. };  
  8.   
  9. 顶点数据:  
  10. { 50.f, 250.f, 0.5f, 1.f, 0xff00ffff,},  
  11. {150.f,  50.f, 0.5f, 1.f, 0xffff0000,},  
  12. {250.f, 250.f, 0.5f, 1.f, 0xff00ff00,},  
  13. {350.f,   50.f, 0.5f, 1.f, 0xff0000ff,},  
  14. {450.f, 250.f, 0.5f, 1.f, 0xffff00ff,}  

1. Z值作用:既然D3DFVF_XYZRHW所得到的值是转换后的坐标值,那么z值合理范围[0.f, 1.f],Z值超出此范围的点将被裁减掉。

                      结论:a. Z值超出[0.f, 1.f],该点被裁减

                                  b. 在同一点上,Z值得大小没有作用。虽然已经启用了ZBuffer。


2. RHW值作用:当相邻顶点的RHW值相同时,看不出差别。但是,使用戈劳德着色模式,相邻顶点的颜色差值将偏向RHW值高的一边,也就是说RHW高的一边在图元渲染的过程中占据较多的比重,该颜色看见的范围也大。如果某个点的RHW值为0,则直接使用另一个顶点的颜色值。


D3DFVF_POINTLIST:

  1. Your application can use them in 3D scenes for star fields, or dotted lines on the surfaces of a polygon.  
  2. The colors in the materials or texture appear only at the points drawn, and not anywhere between the points  

D3DFVF_LINELIST:

  1. You can apply materials and textures to a line list.The colors in the materials or textures appear only along the lines drawn, not at any point in between   
  2. the lines.  
  3. Line lists are useful for such tasks as adding sleet or heavy rain to a 3D scene.  
注意:绘制直线图元时,顶点的数量必须为2的倍数,否则奇数点不被绘制。使用DrawPrimitive(D3DFVF_LINELIST, 0, 直线个数); (直线个数:顶点个数 / 2, 不含奇数点个数)

相关文章推荐

DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST

D3DFVF_XYZRHW: 之前都没有深入了解D3DFVF_XYZRHW,昨天开始认真做了下实验,D3DFVF_XYZRHW小小参数,包含了挺多东西的: DirectX and XNA解释: ...

D3DFVF_XYZ和D3DFVF_XYZRHW的区别

D3DFVF_XYZ和D3DFVF_XYZRHW有什么区别?以前好像没有仔细思考过,只是见到Beginning DirectX9中如是说:The RHW value, which stands for...

D3D中D3DFVF_XYZ和D3DFVF_XYZRHW的区别

 学习D3D9的时候遇到灵活顶点格式(FVF)中D3DFVF_XYZRHW和D3DFVF_XYZ之间差异而引起的问题。参看了同是C++博客的一篇博文,其分析如下:        The RHW val...

D3DFVF_XYZ D3DFVF_XYZRHW区别(转)

  有些新手不知道什么是D3DFVF ,这里做个简单介绍,和一些应用。但关于D3DFVF 最官方的资料还是看SDK(但它是英文的)。    D3DFVF_XYZ——顶点的三维坐标,表示有位置,而且会又...
  • cityice
  • cityice
  • 2011年02月25日 12:12
  • 835

[D3D9] D3DFVF_XYZ、D3DFVF_XYZRHW 的区别 (以纹理渲染的代码举例说明)

POSITION (D3DFVF_XYZ) 使用世界坐标系,其方向与左手坐标系一致:X轴向右递增,Y轴向上递增,Z轴向屏幕内侧递增。 xyz各个轴的范围都是[-1,1] 中心点(0,0) 左上(-1...

D3D-lines(+D3DFVF_XYZ和D3DFVF_XYZRHW的区别)

#included3d9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #define WINDOW_...

Android常用布局组件----重新认识Android(3)

Android常用布局组件----重新认识Android(3)

ajax重新认识:(3)ajax跨域

一、概念 一个域名地址的组成: http://  www   ·  abc.com  :   8080    /    scripts/jquery.js 协议      子域名       ...

重新认识 Sublime Text 3

前言 准备工作 下载及安装 package control list remove install 好用的菜单栏 build system相关 布局 关于插件 打造一个Python的IDE 格式化代码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST
举报原因:
原因补充:

(最多只允许输入30个字)