C++ 在使用特定于框架的类型时,需要记住哪些因素?

C++ 在使用特定于框架的类型时,需要记住哪些因素?,c++,directx,C++,Directx,例如,与在函数调用中使用三个浮点相比,使用D3DXVECTOR3(directX三重浮点)的优缺点是什么 所以 相对于 Scale(1, 1, 1); 当您需要使用库特定的数学函数时,是否最好使用第二个且仅转换为D3DXVECTOR3 我还注意到,许多库都有自己的浮点和双精度等类型。想法?让API接受浮点结构而不是浮点本身的一个重要原因是可读性。在任何使用3D图形的应用程序中,您肯定需要处理大量向量。这样更易于阅读和维护: D3DXVECTOR Scale(D3DXVECTOR a, doub

例如,与在函数调用中使用三个浮点相比,使用
D3DXVECTOR3
(directX三重浮点)的优缺点是什么

所以

相对于

Scale(1, 1, 1);
当您需要使用库特定的数学函数时,是否最好使用第二个且仅转换为D3DXVECTOR3


我还注意到,许多库都有自己的浮点和双精度等类型。想法?

让API接受浮点结构而不是浮点本身的一个重要原因是可读性。在任何使用3D图形的应用程序中,您肯定需要处理大量向量。这样更易于阅读和维护:

D3DXVECTOR Scale(D3DXVECTOR a, double scale)
{
    return D3DXVECTOR(a.x * scale, a.y * scale, a.z * scale);
}

class MyClass
{
public:
    void DoSomething()
    {
        a = Scale(b, 2.0);
        ::D3DXVec3Cross(&out, &a, &b);
    }

private:
    D3DXVECTOR3 out;
    D3DXVECTOR3 a;
    D3DXVECTOR3 b;
};
除此之外:

class MyClass
{
public:
    void DoSomething()
    {
        float scale = 2.0;
        a1 = Scale(b1, scale);
        a2 = Scale(b2, scale);
        a3 = Scale(b3, scale);
        // Hypothetical D3DX function accepting floats directly
        ::D3DXVec3Cross(&out1, &out2, &out3, a1, a2, a3, b1, b2, b3);
    }

private:
    float out1;
    float out2;
    float out3;
    float a1;
    float a2;
    float a3;
    float b1;
    float b2;
    float b3;
};
换句话说,它允许自文档化代码。更不用说当您需要声明一个向量时,输入所需的时间更少(一个
D3DXVECTOR
,而不是三个单独的
float
s)

也就是说,通常3D图形库/框架会定义自己的向量类型和浮点类型,以便跨不同平台和配置进行移植。我们可以简单地将这些类型定义如下:

namespace My3DLib
{

    typedef MyFloat float;

    struct MyVector
    {
        MyFloat x;
        MyFloat y;
        MyFloat z;
    };

    MyVector Scale(MyVector a, MyFloat b);
    MyFloat DotProduct(MyVector a, MyVector b);
    MyVector CrossProduct(MyVector a, MyVector b);
   // ...
}
namespace My3DLib
{

    typedef MyFloat float;

    struct MyVector
    {
        MyFloat x;
        MyFloat y;
        MyFloat z;
    };

    MyVector Scale(MyVector a, MyFloat b);
    MyFloat DotProduct(MyVector a, MyVector b);
    MyVector CrossProduct(MyVector a, MyVector b);
   // ...
}