2つ以上のテクスチャマップをgluSphere OpenGLオブジェクトに適用するにはどうすればよいですか?
質問
ただの楽しみのために、基本的な惑星ビューアーOpenGL Perlアプリケーションを書いています。
栄光の惑星をgluSphere()
で実装し、古典的な地球のテクスチャマップを適用して回転させる、基本的な機能を備えています。
今、OpenGLを介して2番目のテクスチャマップ(たとえば、<!> quot; earth clouds <!> quot;)を適用する場合はどうなりますか?
もちろん、PhotoShopまたは他のグラフィックアプリケーションで2つのテクスチャマップを自分でミックスできますが、OpenGL APIを使用する方法はありますか?
2つのテクスチャをロードしてミップマップを生成しようとしましたが、惑星は2番目ではなく最初のテクスチャのみが適用されて表示されます。
解決
ジム・バックが言ったように、マルチテクスチャリングで目的の効果を得ることができます。
ただし、GLU二次曲線はマルチテクスチャ座標の生成をサポートしているとは思わない(つまりglMultiTexCoord *()とglTexCoord *()を使用している。したがって、マルチテクスチャルートに行くには独自の球体コードが必要だと思う。
別の方法として、2番目のテクスチャマップがある現在の球の周りに少し大きな球を描画することで回避できる場合があります(アルファチャネル<!> amp;ブレンドを適切に使用)。ただし、これによりZファイティングが発生する可能性が高いため、価値があるよりもトラブルになる可能性があります。
独自のスフィアコードの作成は難しくありません。おそらく満足のいく結果を得るための最も簡単な方法です。
他のヒント
テクスチャをどのように組み合わせたいですか?単にマルチテクスチャリングを使用する場合は、目的の効果を得ることができるはずです:
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()を呼び出します。
ドリューホールに同意します。 2番目の球を作成する方が簡単かもしれません。また、すべてのOpenGLカードがマルチテクスチャリングをサポートしているわけではありません。
glPolygonOffsetでzファイティングに対抗できます。