格式1:
//定义顶点格式
struct Vertex
{
Vertex(){}
Vertex(float_x,float _y,float_z,float _w,float_u,float _v)
{
x=_x;y=_y;z=_z;w=_w;
u=_u;v=_v;
}
floatx,y,z,w; //顶点坐标
float u,v; //纹理坐标
};
#define D3DFVF_XYZRHW_TEX D3DFVF_XYZRHW | D3DFVF_TEX1
说明:采用D3DFVF_XYZRHW格式来确定顶点的最终坐标位置,使用此标志后3D屏幕坐标是从“左上角(0,0)开始向左和下增加到屏幕宽和高”。但有个缺点就是,不可以用SetTransform(D3DTS_WORLD,&world);函数来进行坐标变换变换,如果想变换的话应该使用下面那样的方式来变换:
m_vertices[0].position=CUSTOMVERTEX::Position(width2*(1-cos(angle)),bottom,width2*sin(angle),w);
m_vertices[1].position=CUSTOMVERTEX::Position(width2*(1-cos(angle)),top,width2*sin(angle),w);
m_vertices[2].position=CUSTOMVERTEX::Position(width2*(1+cos(angle)),bottom,-1.0f*width2*sin(angle),w);
m_vertices[3].position=CUSTOMVERTEX::Position(width2*(1+cos(angle)),top,-1.0f*left*sin(angle),w);
【PS:适合对图片进行变换,得到3D效果】
格式2:
//定义顶点格式
struct Vertex
{
Vertex(){}
Vertex(float_x,float _y,float_z ,float _u,float_v)
{
x=_x;y=_y;z=_z;
u=_u;v=_v;
}
float x,y,z; //顶点坐标
float u,v; //纹理坐标
};
#define D3DFVF_XYZRHW_TEX D3DFVF_XYZ | D3DFVF_TEX1
说明:使用“D3DFVF_XYZ” + “透视投影”方式表现3D空间中模型的变换,坐标系为“以屏幕中心为(0,0),想右和上增加,但都是小值,单位不是像素”。但这种的话,很不好确定屏幕中贴图的位置。因为,透视投影的话具有“摄像机位置”和“投影参数”,现在还不知道如何让一张贴图贴满整个屏幕,具体的顶点坐标应该为多少!但用这种方法可以很好的实现模型或者纹理图片的3D变换!【PS:适合对3D模型进行变换,不适合对图片进行变换】
贴图:满屏贴图的方法:
格式3:
//定义顶点格式
struct Vertex
{
Vertex(){}
Vertex(float_x,float _y,float_z ,float _u,float_v)
{
x=_x;y=_y;z=_z;
u=_u;v=_v;
}
float x,y,z; //顶点坐标
float u,v; //纹理坐标
};
#define D3DFVF_XYZRHW_TEX D3DFVF_XYZ| D3DFVF_TEX1
说明:使用“D3DFVF_XYZ” + “正交投影”方式表现3D空间中模型的变换,屏幕坐标系为“以屏幕中心为(0,0),向右和上增加,但单位为像素”!可以用SetTransform(D3DTS_WORLD,&world);来进行变换,但基本上得不到3D的效果,因为是“正交”方式,例如图片旋转的过程中根本不像3D效果,而是2D效果!
【PS:不适合进行3D变换】