2016-05-02 32 views
2

私は、OpenGLを使用してレンダリングエンジンを開発していると私は知りたいよ:OpenGLのゲームエンジンは、レンダラは

万一、我々は、単一のため2+法線を持っているように頂点が(フラットシェーディングのために、我々は頂点を複製する必要が重複頂点)をモデル内に作成するか、頂点を複製する必要がある場合にエンジンでアルゴリズムを実装する必要があります。一例は、鋭いエッジと滑らかな表面を有する岩石のモデルである。

エンジンは、(モデル機能に関して)アーティストの意図が何であるかわからないので、アーティストはモデリングソフトウェアで鋭いエッジのために頂点を複製することになります。エンジンは、面の法線間の角度をチェックすることによってどの頂点を複製するかを識別しますが、これはモデルのフィーチャを上書きする可能性があります。

これは、異なる輸出業者がこのニーズに応えるためのオプションを提供する可能性がある(?を見ていないため).objモデル専用です。

答えて

2

重複する頂点は、実際には重複する頂点でない限り、自分自身で定義しているはずです。

グラフィックスプログラミング用語では、「頂点」は、すべてを定義して、単一点を定義する必要があります。これには、位置、ノーマル、テクスチャ座標、および未テクスチャカラーが含まれますが、必ずしもこれらに限定されません。

したがって、2つの点を比較するとき、この定義されたデータのが同一(プラスまたはマイナスのイプシロン)の場合、Vertexは "重複"するだけです()。このような重複を検出して削除するアルゴリズムを記述すると、問題はないと言えます。

問題が発生するのは、アルゴリズムが正しいかどうかを正確に判断するためには、頂点が「スムーズ」か「フラット」かを正確に判断する必要がある場合です。特にあなたの場合:もしあなたが岩をといつもにすることが期待されるならば、それは滑らかな影になります(特に磨耗した岩の方が合理的です)。おそらく大丈夫でしょうが、滑らかで鋭い辺縁、常にそれを台無しにするでしょう。 < 10° angleが円滑に陰影付けされ、>170° angleが平らに陰影付けされている両方の状況が必要です。モデルそのものがそれらのルールを提供しない限り、あなたはそれを正しく取得できません。

したがって、要約すると、モデルに重複した頂点を作成するだけです。あなたの道をアルゴリズムで解こうとしないでください。ほとんどのまともな3Dモデリングプログラムは、このプロセスを比較的簡単にする機能を提供する必要があります。