我正在编写用于在 3D 空间中拾取鼠标的代码。到目前为止,我已经制作了 Ray 和 AABB 课程。我需要的是 Ray-AABB 相交的功能。我知道如何编写它并使其工作,我的问题是哪个类应该定义所述功能?它应该是 Ray 的成员还是 AABB 的成员,两者都不是?面向对象方法的最佳实践是什么?
对我来说,将该函数实现为“引擎”类的成员是最有意义的,更像是一个过程而不是一个函数。但是我希望我的代码真正面向对象。
我正在编写用于在 3D 空间中拾取鼠标的代码。到目前为止,我已经制作了 Ray 和 AABB 课程。我需要的是 Ray-AABB 相交的功能。我知道如何编写它并使其工作,我的问题是哪个类应该定义所述功能?它应该是 Ray 的成员还是 AABB 的成员,两者都不是?面向对象方法的最佳实践是什么?
对我来说,将该函数实现为“引擎”类的成员是最有意义的,更像是一个过程而不是一个函数。但是我希望我的代码真正面向对象。
我会说:两者都不是。
Ray-AABB 交集方法可以在一个Physics
或Intersection
类中(取决于您的实际上下文)作为静态方法(或命名空间中的函数,取决于您的编码约定)。
面向对象很好,但这并不意味着您创建的所有内容都应该是一个类。
面向数据是一种非常好的方法(CPU 友好,缓存未命中率较低)。
编辑:一个好的编码规则是独立思考你的事情,这意味着AABB
实现不应该依赖于Ray
实现。