DirectX的一些

在DirectX可以直接向屏幕输出,其的位置不受坐标变换,视点变换的影响. 就是用 ID3DXFont接口来输出文字.

当然也可以输出随坐标和视点变化而变化的文字,就是用D3DXCreateText 函数,但要注意参数的设置,不正确时可能就会没有文字出现.可以设两个数字位,0.001,0.1:

关于坐标变换的问题:  想计算出某个点在屏幕上的坐标时,可以计算出内部的矩阵变换,  反之 计算出逆矩阵,也可以确定一个屏幕的点在3d中的位置,这里假定其在一个固定的深度.代码如下:


//给出一个屏幕坐标,然后估计一个世界坐标
D3DXVECTOR4 GetRecommValue(D3DXVECTOR4 value,D3DXMATRIXA16 & mat,D3DVIEWPORT9 & vp)
{
 value.x=0.0f;//-15;
 value.y=20.0f;//10;
 value.z=0.8f;
 value.w=1.0f;
 D3DXVec4Transform(&value,&value,&mat);
 value.x/=value.w;value.y/=value.w;value.z/=value.w;
 value.x=(value.x*vp.Width/2)+(vp.Width/2);
 value.y=(-value.y)*vp.Height/2+(vp.Height/2);
 return value;
}

//输入是屏幕坐标,输出是屏幕坐标
D3DXVECTOR4 SreenToScreenGeneration(D3DXVECTOR4 dot,D3DXMATRIXA16 & mat,
   D3DXMATRIXA16 & matInverse,D3DVIEWPORT9 & vp)
{
  
  dot.x=(dot.x-vp.Width/2)*2/(vp.Width);
  dot.y=(vp.Height/2-dot.y)*2/(vp.Height);
  dot.x*=dot.w; dot.y*=dot.w;dot.z*=dot.w;
  D3DXVec4Transform(&dot,&dot,&matInverse);

  dot.z=0.8f;          ///假定的深度
  dot.w=1.0f;
  D3DXVec4Transform(&dot,&dot,&mat);
  dot.x/=dot.w;dot.y/=dot.w;dot.z/=dot.w;
  dot.x=(dot.x*vp.Width/2)+(vp.Width/2);
  dot.y=(-dot.y)*vp.Height/2+(vp.Height/2);
  return dot;
}

D3DXVECTOR4 SreenToWorld(D3DXVECTOR4 dot,D3DXMATRIXA16 & mat,
   D3DXMATRIXA16 & matInverse,D3DVIEWPORT9 & vp)
{
  dot.x=(dot.x-vp.Width/2)*2/(vp.Width);
  dot.y=(vp.Height/2-dot.y)*2/(vp.Height);
  dot.x*=dot.w; dot.y*=dot.w;dot.z*=dot.w;
  D3DXVec4Transform(&dot,&dot,&matInverse);
  return dot;
}

                                                                                                                                  我爱娟娟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值