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解释: ...
  • Emilio563
  • Emilio563
  • 2016年09月27日 13:54
  • 212

重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST

http://blog.csdn.net/liminled/article/details/6674882 D3DFVF_XYZRHW: 之前都没有深入了解D3DFVF_XYZ...
  • pizi0475
  • pizi0475
  • 2015年04月03日 11:00
  • 1040

重新认识java(零) --- 不积跬步无以至千里

好高骛远,眼高手低,是你前进路上最大的绊脚石 — 致走在学习道路上的人 p.s. 本篇文章没有技术含量。...
  • qq_31655965
  • qq_31655965
  • 2016年11月26日 22:09
  • 2699

Irrlicht学习之粒子系统的研究

粒子系统是作为游戏引擎不可或缺的一部分,它可以创造出非常炫的效果,但是传统上,如果是从Direct3D或者是从OpenGL/GLUT开始,将会遇到很大的麻烦,因为需要定义粒子发射器以及粒子管理器,还有...
  • jiangcaiyang123
  • jiangcaiyang123
  • 2013年11月26日 20:33
  • 2317

DirecX 9.0 版本

DirectX 9.0 Complete Software Development Kit (SDK) :(2002-12-19) 点击下载 DirectX 9.0 SDK Update - (S...
  • zxxSsdsd
  • zxxSsdsd
  • 2013年07月16日 12:28
  • 718

重新认识java(三) ---- 面向对象之继承!

学习一个新知识的第一步,就是要知道它是什么,然后要知道为什么要用它,最后要知道如何使用它。这篇文章,我们重新认识一下java中的继承。...
  • qq_31655965
  • qq_31655965
  • 2016年11月29日 22:16
  • 2423

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

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

1.SpringBoot系列-初识SpringBoot

1.创建SpringBoot工程1.1通过IDEA构建SpringBoot工程新建工程,选择如图选项,下一步 选择所需要的组件,下一步,结束即可。 1.2通过网站构建SpringBoot工程S...
  • qq_31776219
  • qq_31776219
  • 2017年06月03日 23:03
  • 236

重新认识javascript(一)

介绍: 为什么重新介绍javascript呢?yinw 原文:A re-introduction to JavaScript
  • yeliang0616
  • yeliang0616
  • 2013年12月01日 20:15
  • 443

这一段时间的收获与感想,重新认识自己

好吧,又过了1个多星期,这一个多星期呢;真的又懂了很多,但我还是有很多很多的东西不懂;这种开心也真的是很开心;这一个多星期,我把JAVA的面向对象的一些特征明白的,只是多态还是有点疑问。生活就是疑问有...
  • u013078669
  • u013078669
  • 2014年11月29日 19:41
  • 673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirecX学习一:重新认识D3DFVF_XYZRHW、D3DPT_POINTLIST、D3DPT_LINELIST
举报原因:
原因补充:

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