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);
// ...
}