Direct3D中自定义顶点的三种方式及贴图和变换处理

格式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变换】

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值