カメラの動作を処理する Camera クラスがあります。そのフィールドの中には、ターゲットの Cube クラスへの参照があります (Cube はオブジェクトの 1 つにすぎませんが、簡単にするために他のオブジェクトについては言及しません)。ビュー マトリックスを計算するには、カメラの位置とターゲットの位置が必要なので、「カメラはここに配置され、ここからこの立方体を見ている」とプログラムに説明できます。立方体が動き回ると、カメラの視点も自動的に変化します。
Cube クラスに依存する Camera クラスと、何も依存しない Cube クラスがあります (この例では)。
立方体などを描画する必要があるときに問題が発生します-何かを描画するために、必要な値の中でカメラのビューマトリックス。これは、最初の段落で計算したものです。本質的に、これは、画面上に物を描画するようになると、Cube クラスも Camera クラスに依存するようになり、互いに依存するようになることを意味します。つまり、次のいずれかになります。
- Cube クラスから直接アクセスできるように、Camera クラスの View マトリックス フィールドを静的にする必要があります。
- Cube クラスでメソッド (SetView など) を作成する必要があります。このメソッドを Camera クラスから呼び出すことができます (既にそこに参照があるため)。
- ビュー マトリックスをスコープ外に保持する必要があります。
- 双方向の依存関係を作成する必要があります。
しかし、私はこれらのどちらも好きではありません:
- 複数のビューを処理するカメラは他にもあり (現在、画面上に 3 台あります)、さらに多く (または少なく) ある可能性があります。
- これにより、コードがわずかに (場合によっては、非常に) 読みにくくなります。たとえば、キューブを描画しているとき、View マトリックスがどこから来たのかがはっきりしません。
- カメラクラスから外部スコープにアクセスするか、外部スコープがカメラにアクセスしますが、外部スコープは実行メカニズムの処理にのみ使用されるため、これは望ましくありません。
- 参照フィールドは現在このシステムのどこにでもあるため、「読み取り専用」のままにしておくのが好きです。参照はコンストラクターで設定され、参照されたクラスからデータを取得するためにのみ使用されます。
また、明確にしていない場合は、複数の Camera オブジェクトと複数の Cube オブジェクトがあることを繰り返しましょう。カメラはキューブに依存する場合と依存しない場合がありますが、通常は少なくとも 1 つのカメラがキューブに依存しています。
任意の提案をいただければ幸いです:)