我正在尝试读取为 DirectX 应用程序创建的 3D 模型,这些模型定义如下:
n
顶点以线性模式给出,字段根据 FVF 呈现。 但是,我不知道这些字段的顺序。逻辑是它是在 DirectX 文档中的某个地方定义的,但我找不到它。例如,这两个结构中哪一个是正确的
FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_NORMAL
(C 语法,但这个问题适用于每种语言) ?// This one ?
struct vertex1
{
D3DVERTEX pos;
DWORD color;
D3DVERTEX normal;
};
// Or this one ?
struct vertex2
{
D3DVERTEX pos;
D3DVERTEX normal;
DWORD color;
};
我想要一个包含所有可能字段的一般性答案(例如,
XYZ before DIFFUSE before NORMAL before TEX1 before TEX2
)。指向文档右侧页面的指针也可以,因为我找不到它:)。
最佳答案
我自己也遇到了同样的事情。
我认为位的顺序是所需的顺序。来自 d3d9types.h:
#define D3DFVF_RESERVED0 0x001
#define D3DFVF_POSITION_MASK 0x400E
#define D3DFVF_XYZ 0x002
#define D3DFVF_XYZRHW 0x004
#define D3DFVF_XYZB1 0x006
#define D3DFVF_XYZB2 0x008
#define D3DFVF_XYZB3 0x00a
#define D3DFVF_XYZB4 0x00c
#define D3DFVF_XYZB5 0x00e
#define D3DFVF_XYZW 0x4002
#define D3DFVF_NORMAL 0x010
#define D3DFVF_PSIZE 0x020
#define D3DFVF_DIFFUSE 0x040
#define D3DFVF_SPECULAR 0x080
#define D3DFVF_TEXCOUNT_MASK 0xf00
#define D3DFVF_TEXCOUNT_SHIFT 8
#define D3DFVF_TEX0 0x000
#define D3DFVF_TEX1 0x100
#define D3DFVF_TEX2 0x200
#define D3DFVF_TEX3 0x300
#define D3DFVF_TEX4 0x400
#define D3DFVF_TEX5 0x500
#define D3DFVF_TEX6 0x600
#define D3DFVF_TEX7 0x700
#define D3DFVF_TEX8 0x800
我很确定您要查找的订单是:
位置,正常,PSIZE,漫反射,镜面反射,TEX0[,TEXn...]
我也无法在文档中找到明确的答案。
关于directx - D3D9 顶点中字段的位置(位置、法线等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1514796/