楽しみのために、私はDCPU-16のワイヤーフレームビューアーを作成しようとしています。ワイヤーフレームで非表示になっている線を非表示にする方法を除いて、すべての方法を理解しています。SOに関するすべての質問は、OpenGLへのアクセス権があることを前提としていますが、残念ながら、DCPU-16(またはあらゆる種類のハードウェアアクセラレーション)のようなものにはアクセスできません。
GoogleブックスでAppelのアルゴリズムについてかなり良い説明を見つけました。しかし、私が理解するのに苦労している1つの問題があります。
Appelは、前面と背面のポリゴンで共有されるエッジ、または閉じた多面体の一部ではない前面のポリゴンの共有されていないエッジとして輪郭線を定義しました。2つの前面ポリゴンで共有されるエッジは、可視性に変化を与えないため、等高線ではありません。図8.4では、エッジAB、EF、PC、GK、CHは等高線ですが、エッジED、DC、GIは等高線ではありません。
アルゴリズムのルールと、等高線が作成された後のアルゴリズムのしくみを理解していますが、エッジが「前向きポリゴンと後ろ向きポリゴンで共有されているかどうかを判断するために何をする必要があるかわかりません。コーディングの観点からは、閉じた多面体の一部ではない、正面を向いたポリゴンの共有されていないエッジ。私は形状を見ることができ、頭の中でどの線が等高線であるかを知ることができますが、その「理解」をコード化されたアルゴリズムに転送する方法についての手がかりはありません。
更新
等高線の決定にある程度の進歩がありました。コンピューターグラフィックスに関するバッファロー大学のクラスからのこれら 2つの講義ノートを見つけました。
エッジを考慮してください。これらは3つのカテゴリに分類されます。
- 2つの見えない面をつなぐエッジは、それ自体は見えません。これはリストから削除され、無視されます。
- 表示される可能性のある2つの面をつなぐエッジは「マテリアルエッジ」と呼ばれ、さらに処理する必要があります。
- 表示される可能性のある面と表示されない面を結ぶエッジは、「マテリアルエッジ」の特別なケースであり、「輪郭エッジ」とも呼ばれます。
上記の2つの情報を使用すると、これをコードとして書き出すことができるようになりますが、まだ長い道のりがあります。