游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2673|回复: 3

D3DFVF浅谈

[复制链接]

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-28 10:32:00 | 显示全部楼层 |阅读模式
有些新手不知道什么是D3DFVF ,这里做个简单介绍,和一些应用。但关于D3DFVF 最官方的资料还是看SDK(但它是英文的)。

D3DFVF_XYZ——顶点的三维坐标,表示有位置,而且会又Direct3D进行矩阵变换;
D3DFVF_XYZRHW——即平时所说rhw,它说明顶点有位置,而且经过了矩阵变换,不用在由Direct3D对它进行变换,通常用于做UI(用户界面);
D3DFVF_DIFFUSE——表示顶点格式中有漫反射颜色;
D3DFVF_NORMAL——表示顶点有法线向量;
D3DFVF_TEX^——表示顶点有纹理坐标,^可以是1至8,表示有多少套纹理坐标;

以上是最常用的D3DFVF了,如果还要更详细,请看SDK(一半以上的够用了)。

还有一些应用方法:
1、在创建VB时,pd3dDevice->CreateVertexBuffer(3*sizeof(Vertex),D3DUSAGE_WRITEONLE,FVF,D3DPOOL_MANAGED,&先前声明的VB,NULL);
在此之前还要先定义FVF:
#define FVF (D3DFVF_XYZ|D3DFVF_DIFFUSE)//这里随自己需要
还要定义自己的顶点结构,这个FVF,顶点结构可以这样:
struct Vertex
{
float x,y,z;//对应D3DFVF_XYZ
DWORD diffuse;//对应D3DFVF_DIFFUSE
};

2、我们很多时候要用到ID3DXMesh,但它的顶点用矩阵变换还不够,不能满足骨骼动画的需求,所以只能用Vertex Shader和ID3DXMesh:ockVertexBuffer()了,这里重点说LockVertexBuffer()。
首先,我们不知到Mesh的格式,如果贸然用LockVertexBuffer()会出错,所以先统一Mesh的顶点格式:
ID3DXMesh Mesh;
..........
Mesh->CloneMeshFVF (D3DXMESH_MANAGED,D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DXFVF_TEX1),pdev,&Mesh);
重新定义结构Vertex:
struct Vertex
{
float x,y,z;//对应D3DFVF_XYZ
float nx,ny,nz;//对应D3DFVF_NORMAL
DWORD diffuse;//对应D3DFVF_DIFFUSE
float u,v;//对应D3DFVF_TEX1
};
之后就可以Lock了:
Vertex *v;
int numV=Mesh->GetNumVertices();//Mesh的顶点数量
Mesh->LockVertexBuffer(NULL,(void**)&v);
for(int i=0;i<count;i++)
{
v.x+=5;//这里就是实现,可以任意把v的数据调整
}
Mesh->UnlockVertexBuffer();//解Lock

就这样了,推荐大家看看Kane的教程。
差点忘了,上面也许有错误,前指出,我的邮箱:hdm2968@163.com

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-5-28 20:49:00 | 显示全部楼层

Re:D3DFVF浅谈

我虽然不是初学者,也帮你顶一下!^_^

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-5-28 22:38:00 | 显示全部楼层

Re:D3DFVF浅谈

喔,楼上好牛!FVF其实还是比较麻烦的~~不过用起来比DEcl要容易些,通常场合一般也够用

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-5-29 03:51:00 | 显示全部楼层

Re:D3DFVF浅谈

不推荐FVF,已经过时了,应该用ELEMENT
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 19:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表