我有相机类,它处理相机行为。其中的字段是对目标的 Cube 类的引用(Cube 只是对象之一,但为了简单起见,我不会提及其他)。为了计算 View 矩阵,我需要相机的位置和目标的位置,所以我可以向我的程序解释:“相机放在这里,从这里看这个立方体”。如果立方体碰巧四处移动,相机的视角也会自动改变。
到目前为止,一切都很好:有一个 Camera 类依赖于 Cube 类,还有一个 Cube 类不依赖任何东西(在这个例子中)。
当我需要绘制一个立方体或其他任何东西时,我遇到了一个问题——为了绘制一些东西,在所需的值中,它是相机的视图矩阵;这就是我刚刚在第一段中计算的那个。本质上,这意味着当我开始在屏幕上绘制东西时,Cube 类也变得依赖于 Camera 类,并且它们现在相互依赖。这意味着我要么:
- 需要将Camera类的View矩阵字段设为静态,这样我就可以直接从Cube类中访问了。
- 需要在 Cube 类中创建一个方法(例如 SetView),然后我可以从 Camera 类中调用该方法(因为我已经有它的引用)。
- 需要将视图矩阵保持在外部范围内。
- 需要做一个双向依赖。
但是,我不喜欢其中任何一个:
- 有更多的摄像机可以处理多个视图(目前屏幕上有 3 个)并且可能更多(或更少)。
- 这使得代码稍微(有时,也许,非常)不可读——例如,当我绘制立方体时,视图矩阵的来源不是很清楚,你只是有点使用它,不要回头。
- 我会从相机类访问外部范围,或者外部范围将访问相机,我不喜欢这样,因为外部范围仅用于处理执行机制。
- 我喜欢将我的引用字段保持为“只读”,因为它目前在这个系统中无处不在——引用是在构造函数中设置的,并且仅用于从引用的类中获取数据。
而且,如果我没有说清楚,让我重复一下,有多个 Camera 对象,以及多个 Cube 对象;而任何相机可能会或可能不依赖于任何立方体,但通常至少有一个相机依赖于立方体。
任何建议,将不胜感激 :)