1

これが私の問題です。何百もの頂点を持つ複雑な自己交差のマルチコンターポリゴンをテッセレーションしています。GLUテッセレータがnullポインタ0x0000000の問題でクラッシュします。自己交差するポリゴンを作成しないと、クラッシュすることはありません。交差していなければ、どんな状況でもクラッシュすることはありません。私は自分のアプリケーションのどこでもNULLをチェックしますが、それは私の側にあるのではないと確信しています。SGIから古いバージョンのGLU1.2を見つけましたが、クラッシュすることはありませんが、GLU1.3に基づくmesaバージョンとWindowsバージョンの両方がクラッシュします。デバッグモードでクラッシュするものはありません。詳細情報を取得するために、MesaのGLUをコンパイルし、最初にアサーションが失敗することを確認しました。次に、コメントアウトすると、mallocに失敗する関数からNULLに設定されたポインターがあります。私はこの時点で何をすべきか非常によくわかりません。この問題を解決するために何ができますか?自分に合ったバージョンのMesaのGLUを作成してみるべきですか?ここから先に進む方法がわかりません。

さらにデバッグした後、GLU_TESS_ERROR_5が発生していることがわかりました。これは、数値が大きすぎるエラーだと思いますが、forループを実行して、それより大きい数値をテストしましたが、運がありません:(

4

1 に答える 1

1

少なくともWindowsでは、GLU_TESS_ERROR_5は、座標の1つが大きすぎることを意味します。具体的には、GLUでは、座標がオーバーフローせずに乗算できるように十分に小さい必要があります。仕様によると、制限は定数GLU_TESS_COORD_TOO_LARGEで定義されています。この定数が存在する場合は、すべての座標の絶対値がそれよりも小さいことを確認してください。そうでない場合は、座標が-10^150から10^150の間であることを確認しても安全だと思います。それでも問題が解決しない場合は、範囲を徐々に小さくしてみてください。

また、ジオメトリに問題があり、GLUで別の問題が発生している可能性もあります。このエラーをトリガーする最も単純なポリゴンを見つけてください。

それでも問題が解決しない場合は、新しいバージョンのGLUが利用可能かどうかを確認してください。Mesaについてはわかりませんが、VC++に同梱されているOpenGLのバージョンは古くなっていることで有名です。

他のすべてが失敗した場合は、別のライブラリを使用してテッセレーションを実行してみてください。簡単に検索すると、Triangle1が適切な候補のようです。

于 2011-02-19T01:34:43.303 に答える