XNA向量的Subtract和op_Subtraction之间有什么区别?

时间:2011-02-04 06:22:40

标签: vector xna

在XNA Vector3的帮助中,它列出的两个公共方法是Subtract和op_Subtraction。它们之间的差异是什么时候应该用来代替另一个呢?

2 个答案:

答案 0 :(得分:2)

op_Subtraction-运算符实现)和Vector3.Subtract基本相同。它们使用减法运算的值创建一个新向量。 Vector3是一种值类型,因此没有内存管理成本,但是建设成本很低。

Subtract的另一个重载略有不同:

void Vector3.Subtract(ref Vector3 value1, ref Vector3 value2, out Vector3 result)

这个引用了它的输入和输出。对于面向数据的编程更好(例如:物理引擎中的紧密循环,它从一个数组中获取数据并将其输出到另一个数组中)。这样可以消除构造成本和传递6个浮点数作为参数的成本,但是函数调用和解除引用的成本仍然很低。

通过直接减法可以更快地获得:

result.X = value1.X - value2.X;
result.Y = value1.Y - value2.Y;
result.Z = value1.Z - value2.Z;

当然,当您选择更快的选项时,您也会失去可读性!这更清楚:

result = value1 - value2;

所以要回答你的问题 - 你应该在进行向量减法时绝对使用向量-运算符,除非你正在编写某种非常高性能的数据导向的东西< strong> 您已对自己的代码进行了分析,并认为这是一项值得提升的性能。

如果您对此类更低级别的效果信息感兴趣,请查看Shawn Hargreaves的Understanding XNA Framework Performance。 (事实上​​,它包括一个基准,比较我在此处列出的三种方法,当在粒子系统中使用时。)

答案 1 :(得分:1)

op_Subtraction()-运算符的实现,但它们是相同的:

vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)