というわけで、そもそもCGが苦手なんです。機能の1つが3D変換を2D「レイヤー」に適用できるGUIツールキットを実装しようとしています。(レイヤーには Z 座標が 1 つしかありません。変換前は、2 次元の軸に合わせた四角形です)
レイヤーを押し戻す 3D 変換に到達するまでは、これは非常に簡単です。ここに示すように、レイヤーを正しくレンダリングするには、レイヤーを複数のポリゴンに分割する必要があります。また、透過性を持たせることができるため、レイヤーが完全に遮られず、分割が必要になる場合があります。
これは、問題と望ましい結果を示した図です。このシナリオでは、青いレイヤー ( Bと呼びます) は赤いレイヤー ( R ) の上にあり、同じ Z 位置を持っています (ただし、BはRの後に追加されました)。このシナリオでは、Bを回転すると、その上部の 2 つのポイントは 0 よりも小さい Z インデックスを取得し、下部のポイントは 0 よりも高いインデックスを取得します (アンカー ポイントは 0 として残る唯一のポイント/ラインです)。
誰かがCPUでこれを行う良い方法を提案できますか? このシナリオに適した適切なアルゴリズムの実装 (C++ または C) を見つけるのに苦労しました。
編集:明確にするために、パイプラインのこの段階では、まだレンダリングはありません。各レイヤーのポリゴンのセットを作成する必要があるだけです。これは、レイヤーの変換されて隠蔽されたジオメトリを表します。次に、必要に応じてレンダリング (ソフトウェアまたはハードウェアのいずれか) が行われますが、常にそうとは限りません (たとえば、ヒット テストを行う場合)。
編集 2:これを達成するためのオプションとしてバイナリ スペース パーティショニングを検討しましたが、使用方法が不明な 1 つの実装 ( ) しか見つけることができGL2PS
ませんでした。BSP がどのように機能するかについては漠然とした理解がありますが、オクルージョン カリングにどのように使用できるかはわかりません。
編集 3:この段階では、色と透明度のブレンドを行うつもりはありません。ただの純粋な幾何学。透明度はレンダラーで処理でき、オーバードローも問題ありません。この場合、青いポリゴンは赤いポリゴンの下に描画できますが、より複雑なケースでは、深度の並べ替えやポリゴンの分割が必要になる場合があります (以下のような恐ろしいケースの例)。ビューポートは固定ですが、すべてのレイヤーが 3D で変形できるため、以下のようなシェイプを作成できます。
したがって、私が本当に探しているのは、レイヤーBを 2 つの青い形状に幾何学的に分割するアルゴリズムです。そのうちの 1 つは「上」に描画され、もう 1 つはRの下に描画されます。「下」の部分はオーバードローになりますが、大きな問題ではありません。したがって、Bを 2 つのポリゴンに分割するだけで、これらのポリゴンが順番に描画されるときにRをカットするように見えます。混ざる心配もありません。
編集 4:この目的のために、何もレンダリングできません。これはすべて、純粋に幾何学的に行う必要があります ( 2Dポリゴンの生成)。これは私がもともと目指していたものです。
編集 5:サブシーンごとのクワッドの総数は約 30 (平均) であることに注意してください。間違いなく 100 を超えることはありません。レイヤーが 3D 変換されていない限り (この問題が発生する場所です)、レイヤーは描画される前に Z 位置でソートされた基数です。Z 位置が同じレイヤーは、追加された順に描画されます (先入れ先出し)。
元の質問で明確にしなかった場合は申し訳ありません。