我有Camera类,它处理相机行为。其中的字段是对目标的Cube类的引用(Cube只是其中的一个对象,但我不会提到其他人简化它)。为了计算View矩阵,我需要相机的位置和目标的位置,所以我可以向我的程序解释:“相机放置在这里,从这里看它就是这个立方体。如果立方体碰巧移动,相机的视角也会自动改变。两个类依赖于彼此
到目前为止,一切都很好:有一个Camera类取决于Cube类,还有Cube类,它不依赖任何东西(在这个例子中)。
我得到一个问题,当我需要绘制一个立方体,或任何其他 - 以画点什么,需要的值它摄像机的观察矩阵中;这是我刚刚在第一段中计算出来的那个。实质上,这意味着当我在屏幕上绘制事物时,Cube类也变得依赖于Camera类,并且它们现在相互依赖。这意味着我要么:
- 需要使Camera类的View矩阵字段为静态,所以我可以直接从Cube类访问它。
- 需要在Cube类中创建一个方法(例如SetView),然后我可以从Camera类调用它(因为我已经有了它的参考)。
- 需要在外部范围内保留View矩阵。
- 需要进行双向依赖。
不过,我也不喜欢这些:
- 有多个摄像头,其处理多个视图(目前有在屏幕上,其中3),并可能有更多的(或更少)。
- 这会使代码略微(有时可能非常)不可读 - 例如,当我绘制立方体时,不太清楚View矩阵的来源,您只是有点使用它而不回头看。
- 我会从相机类访问外部作用域,或者外部作用域将访问相机,我不喜欢这样做,因为外部作用域仅用于处理执行机制。
- 我喜欢让我的参考字段“只读”,因为它目前在这个系统中的任何地方 - 引用是在构造函数中设置的,并且仅用于从引用的类中获取数据。
而且,如果我没有说清楚,让我重复说有多个Camera对象和多个Cube对象;而任何相机可能依赖于任何Cube,也可能不依赖任何Cube,但通常至少有一个依赖于Cube的相机。
任何建议,将不胜感激:)
感谢您的注意......在接受此回复之前,我必须先进行一些测试,但是您现在已将我的想法告诉了我应该做的事 - 在Camera.Attach(IAttachable attachTo)相机类,在那里我可以命令相机跟随该物体......在这种情况下,我会反转当前的依赖性。 – avance70 2010-10-19 07:07:47
是的,我重新编写了这个部分,在我看来,目前为止最好的解决方案。 – avance70 2010-10-20 06:14:19