注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

DirectX回头看  

2012-03-20 11:44:18|  分类: 技术类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


前一段时间把DirectX书上的一个例子原原本本的抄了一边,抄的过程中只知道个大概,对于很多细节都不了解。昨天一日没上网把书从头又看了一边,这次看的效果要比第一次看好的多。对于Win32消息处理,渲染流水线和组件对象模型,接口对象等等都有了一个较为清晰的认识。

下面是几个以前不明晰的概念的总结:

1.FVF(Flexible Vertex Format灵活顶点格式)所谓灵活顶点格式即用户可以根据自身的需求来设定顶点的数据结构。比如说用户对点的需求更多的关注于位置和颜色,那么在设计顶点数据结构时就只需要在顶点结构体中加入位置和颜色信息,同样的如果用户更多的要关注顶点的纹理和法线信息则也可以进行相应的设置:

a.关注位置和颜色的顶点设置:

struct CUSTOMVERTEX

{

FLOAT X,Y,Z;

DWORD COLOR

};

b.关注纹理和法线信息

struct NORMALVERTEX

{

FLOAT X,Y,Z;

FLOAT NX,NY.NZ;//法线

FLOAT U,V;//纹理坐标

};


在设置完自己需要的顶点格式后还需要通过固定的宏定义方式把我们自定义的顶点格式转化为Direct3C设备可以识别的顶点格式

 

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

#define D3DFVF_NORMALVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)

其中D3DFVF_XYZ,D3DFVF_DIFFUSE,D3DFVF_NORMAL,D3DFVF_TEX1分别表示顶点坐标,顶点漫反射信息,顶点法线信息,顶点的纹理信息(1表示有一个纹理信息可选项为1——8),还有其他几个选项参见Documentation for C++。
2.D3D中的图元
通过昨天的阅读,纠正了我的一个错误认识,一直以来我都以为d3d中全部都是以三角形作为基础的,其实原来到d中默认的设置了六种图元,并通过IDirect3DDevice9接口的DrawPrimitive中的第一个参数来选择需要绘制的图元类型:点列(D3DPT_POINTKLIST模拟粒子),线列(D3DPT_LINELIST模拟雨雪),线带(D3DPT_LINESTRIP),三角形列(D3D_TRIANGLELIST游戏中用来模拟墙壁),三角形带(D3DPT_TRIANGLESTRIP各种图),三角形扇(D3DPT_TRIANGLEFAN这个在DirectX10中被取消了)。
3.Direct3D中的每个顶点都是存储在内存或者显存中(可设置)中,然后通过交换链来实现平滑过渡。所谓交换链即在显示器上显示的和后台缓存中的进行交换的中介。大量的顶点从内存或者显存中以流的方式进入渲染流水线,结果处理的就是我们显示器上出现的画面。
4.固定渲染流水线的过程:
内存池中未经任何处理的顶点->T&L变换(Transform And Lighting)(矩阵变换;光照处理;渲染状态(共有209种,常见的包括剔除状态(用来消隐背面的三角形),着色状态,填充状态(面/线框填充)))->光栅化阶段(纹理映射,图元绘制,其他的渲染状态)->显示像素。
5.矩阵变换
矩阵的世界变换,投影变换,缩放变换,平移变换、

 
  评论这张
 
阅读(123)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017