首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于XNA向量,Subtract和op_Subtraction有什么不同?

对于XNA向量,Subtract和op_Subtraction有什么不同?
EN

Stack Overflow用户
提问于 2011-02-04 14:22:40
回答 2查看 429关注 0票数 0

在op_Subtraction的帮助中,列出了两个公共方法: Subtract和op_Subtraction。它们之间的区别是什么,什么时候应该使用一个而不是另一个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-04 23:45:45

op_Subtraction ( -运算符实现)和Vector3.Subtract本质上是一回事。它们使用减法运算的值创建一个新的向量。Vector3是一个值类型,因此没有内存管理成本,但是有一个很小的构建成本。

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

代码语言:javascript
复制
void Vector3.Subtract(ref Vector3 value1, ref Vector3 value2, out Vector3 result)

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

你可以通过直接做减法来获得更快的速度:

代码语言:javascript
复制
result.X = value1.X - value2.X;
result.Y = value1.Y - value2.Y;
result.Z = value1.Z - value2.Z;

当然,当你选择更快的选项时,你也会失去可读性!这一点非常清楚:

代码语言:javascript
复制
result = value1 - value2;

所以为了回答你的问题-你应该绝对使用向量-运算符进行向量减法,除非你正在编写某种非常高性能的面向数据的东西,你已经分析了你的代码,发现这是一个有价值的性能改进。

如果您对更多像这样的低级性能信息感兴趣,可以看看Shawn Hargreaves的Understanding XNA Framework Performance。(实际上,当在粒子系统中使用时,它包含了一个基准,比较了我在这里列出的三种方法。)

票数 2
EN

Stack Overflow用户

发布于 2011-02-04 14:26:48

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

代码语言:javascript
复制
vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4895162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档