顶点格式数据与Vertex Shader中数据不一致?为什么啊解决思路

顶点格式数据与Vertex Shader中数据不一致?为什么啊?
我以为它们之间的接口应该是严丝合缝的,但事实却不是这样. 为什么啊?
====================================
拿位置数据来说吧:

顶点结构体定义是:
float x, y, z;或是D3DXVECTOR3 v3Pos;

顶点格式声明中是:
D3DDECLTYPE_FLOAT3, D3DDECLUSAGE_POSITION

但在Vertex Shader中却是:
float4 pos:POSITION

为什么从float3变成float4啦?中间的变化是谁在“搞鬼”呀?这就好像我做的工作在暗中
被人做了手脚一样,如果出错,我都不知道。但责任却是我的,造成的结构是,我连出错的地方都找不到啊。
=====================================
颜色数据就更离谱啦:

顶点结构体定义是:
DWORD color

顶点格式声明中是:
D3DDECLTYPE_D3DCOLOR, D3DDECLUSAGE_COLOR

但在Vertex Shader中却是:
float4 color:COLOR

这中间的变化就更大啦。搞的人家莫名其妙,一头雾水?这是为什么啊. 谢谢!

------解决方案--------------------
可以查查齐次坐标方面的知识。
position第4维可以是0或1,1表示是点,0表示是向量。
------解决方案--------------------
我写vs的时候都是直接写 float3 xx:POSITION

不过写的更多的是 float2 xx:POSITION
因为我用direct3d搞2d游戏。

3d的我不搞。我的定位是退居其次:搞2d游戏..
------解决方案--------------------
你用的顶点格式是D3DXVECTOR3的,你就写float3
你用的顶点格式是D3DXVECTOR4的,你就写float4
如果没对应的话,就是写错了,可能写shader的人写错了,或者直接从别的地方复制粘贴的吧。

色彩在shader里面会自动转换成一个float4,或者一个vector,每个色彩分量是0~1的浮点数,这个没问题。