4

楽しみのために、基本的な惑星ビューアー OpenGL Perl アプリケーションを作成しています。輝かしい惑星を使用して基本的な作業を行い、 を介して実装gluSphere()し、古典的な地球のテクスチャ マップを適用して回転させます。

では、OpenGL を介して 2 番目のテクスチャ マップ (「地球の雲」など) を適用したい場合はどうすればよいでしょうか。

もちろん、PhotoShop やその他のグラフィック アプリケーションで 2 つのテクスチャ マップを自分でミックスすることもできますが、OpenGL API を使用する方法はありますか?

2 つのテクスチャを読み込んでミップマップを生成しようとしましたが、惑星は最初のテクスチャのみが適用されて表示され、2 番目のテクスチャは適用されません。

4

3 に答える 3

6

テクスチャをどのように組み合わせますか? マルチテクスチャリングを使用するだけで、目的の効果を得ることができるはずです。

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture1ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

テクスチャを組み合わせる方法に応じて、glTexEnvf 呼び出しを設定してください。次に、gluSphere() を呼び出します。

于 2008-12-08T02:50:42.373 に答える
5

Jim Buck が言ったように、マルチテクスチャリングで目的の効果を得ることができます。

ただし、GLU quadrics はマルチテクスチャ座標生成をサポートしていないと思います (つまり、glMultiTexCoord*() と glTexCoord*() を使用)。したがって、マルチテクスチャ ルートに進むには、独自の球体コードが必要になると思います。

または、2 番目のテクスチャ マップがある現在の球体の周りに少し大きな球体を描画することで回避できる場合があります (アルファ チャネルとブレンディングを適切に使用することで)。ただし、これは Z ファイティングを引き起こす可能性が高いため、価値があるよりも問題が発生する可能性があります。

独自の sphere コードを作成することは難しくありません。おそらく、満足のいく結果を得る最も簡単な方法です。

于 2008-12-08T04:06:32.517 に答える
1

ドリュー・ホールに同意します。2 つ目の球体を作成する方が簡単かもしれません。また、すべての OpenGL カードがマルチテクスチャリングをサポートしているわけではありません。

glPolygonOffset で Z ファイティングに対抗できます。

于 2008-12-11T12:25:35.033 に答える