基本的に、私はワールド内のオブジェクトを描画するC ++プログラムを作成していますが、複数のオブジェクトで構成されるオブジェクトを回転/移動するときに、ライティングに問題があります(たとえば、ツリーオブジェクトは、葉のトランクとピラミッドオブジェクト)。
現在、動作中の光源がありますが、オブジェクトのサブコンポーネント(親であるツリー内のピラミッドオブジェクトなど)を回転させるときに、いくつかの問題が発生します。
ツリーオブジェクトに回転を適用すると、すべてのライティング/シェーディングが機能しますが、ツリー内のピラミッドオブジェクトを回転させようとすると、ライティングが不安定でランダムになります。私は誰かが私が遭遇する可能性のあるものについていくつかのヒントやヒントを持っているかもしれないことを本当に望んでいますか?
編集:このプロジェクトにはたくさんのファイルがあり、全体像を示すのに十分な量をここに投げ込むのは難しいでしょう。基本的に私の手順は次のとおりです。
- 機能しているopengl光源で世界を設定します。
- 変換行列が関連付けられた形状オブジェクトを作成します。
- シェイプとそのマトリックスを使用して、シェーディングに使用する法線を計算します。
- 次に、他のシェイプオブジェクトで構成される新しいシェイプオブジェクトを作成し、それをワールドにスローして、ライティングを有効にします。
- ここで問題が発生します。親オブジェクトを回転させると照明は問題ありませんが、子オブジェクトを回転させると照明はランダムになります。