如何在类中使用Xmfloat(从d3dx迁移)

如何在类中使用Xmfloat(从d3dx迁移),d3dx,directxmath,D3dx,Directxmath,我正在尝试迁移到directxmath,但新代码给我带来了一些麻烦 class Vec3 : public XMFLOAT3 { public: inline float Length() { return XMVector3Length(this); } inline Vec3 *Normalize() { return static_cast<Vec3 *>( XMVector3Normalize(this, this)); } inline floa

我正在尝试迁移到directxmath,但新代码给我带来了一些麻烦

 class Vec3 : public XMFLOAT3
{
public:
    inline float Length() { return XMVector3Length(this); }
    inline Vec3 *Normalize() { return static_cast<Vec3 *>(  XMVector3Normalize(this, this)); }
    inline float Dot(const Vec3 &b) { return  XMVector3Dot(this, &b); }
    inline Vec3 Cross(const Vec3 &b) const;

    Vec3(XMFLOAT3 &v3) { x = v3.x; y = v3.y; z = v3.z; }
    Vec3() : XMFLOAT3() { XMVectorZero(); }
    Vec3(const float _x, const float _y, const float _z) { x=_x; y=_y; z=_z; }
     Vec3(const double _x, const double _y, const double _z) { x = (float)_x; y = (float)_y; z = (float)_z; }
    inline Vec3(const class Vec4 &v4);
 };
class Vec3:public XMFLOAT3
{
公众:
内联浮点长度(){返回XMVector3Length(this);}
内联Vec3*Normalize(){return static_cast(XMVector3Normalize(this,this));}
内联浮点点(const Vec3&b){返回XMVector3Dot(this,&b);}
内联Vec3交叉(常数Vec3&b)常数;
Vec3(XMFLOAT3&v3){x=v3.x;y=v3.y;z=v3.z;}
Vec3():XMFLOAT3(){XMVectorZero();}
Vec3(常数浮点x,常数浮点y,常数浮点z){x=x;y=y;z=z;}
Vec3(constdouble x,constdouble y,constdouble z){x=(float)x;y=(float)y;z=(float)z;}
内联Vec3(常量类Vec4和v4);
};
旧代码看起来像:

 class Vec3 : public D3DXVECTOR3 
     {
    public:
        inline float Length() { return D3DXVec3Length(this); }
        inline Vec3 *Normalize() { return static_cast<Vec3 *(D3DXVec3Normalize(this, this)); }
        inline float Dot(const Vec3 &b) { return D3DXVec3Dot(this, &b); }
        inline Vec3 Cross(const Vec3 &b) const;

        Vec3(D3DXVECTOR3 &v3) { x = v3.x; y = v3.y; z = v3.z; }
        Vec3() : D3DXVECTOR3() { x = 0; y = 0; z = 0; }
        Vec3(const float _x, const float _y, const float _z) { x=_x; y=_y; z=_z; }
         Vec3(const double _x, const double _y, const double _z) { x = (float)_x; y = (float)_y; z = (float)_z; }
        inline Vec3(const class Vec4 &v4);
     };
class Vec3:public D3DXVECTOR3
{
公众:
内联浮点长度(){return D3DXVec3Length(this);}

内联Vec3*Normalize(){return static_cast
XMFLOAT3
不会隐式转换为库中的
XMVECTOR
。您必须使用
XMLoadFloat3
。上面的
Length
方法是:

inline float Length() const
    { XMVECTOR v = XMLoadFloat3(this);
      return XMVectorGetX( XMVector3Length(v) ); }
<>我建议你看一下直接的包装器。它使你使用这些类型的东西有点宽容,比如你上面假设的C++隐式转换。 SimeMaTe::VoCTR3/Cuff>类本质上是你要写的东西。使用本机DirectXMath类型,这样理论上可以比使用上面的抽象更有效地使用SIMD