0

複数の不規則なテクスチャを曲面 (xyz 頂点とそれぞれに指定された uv を持つメッシュ) にデカールしたい。モデル ファイルからメッシュを読み込んでいますが、サーフェスについてアプリオリな知識はありません...わかっているのは、「妥当な」UV マッピングがあることだけです。いくつかの UV 領域を選択して、それらにテクスチャを適用したいと考えています。各領域は、UV 座標のバウンディング ポリゴンによって指定されます。この場合、同等の xyz ポリゴンがわからないか、答えは簡単だと思います。

これは、平らな表面と単純な円筒形の表面 (平均として法線を選択することで平滑化された一連の平らなストライプとして近似します) に対して機能します。どちらの場合も、uv から xyz への一意のマッピングがわかっているため、テクスチャをバインドして実際のサーフェスを描画する前に、同等の xyz ポリゴンをステンシル バッファーに描画することにより、ステンシル バッファーを設定して、描画を目的の uv 領域に制限します。

また、テクスチャをサーフェスにデカールするときに、テクスチャ内で rgba 透明度を使用しています。通常、各テクスチャ領域は小さな回転した長方形であるため、4 つの頂点をステンシル バッファーに描画し、テクスチャ マトリックスを使用してそれを回転させ、テクスチャ内の rgba 透明度を使用して、テクスチャの適切な部分のみが適用されるようにします。これはすべてうまく機能します。

作業コードを再利用したいのですが、これらのテクスチャを任意の曲面/メッシュに適用します。これらのモデルを読み込んで描画しており、すでに面全体にテクスチャを適用できます [つまり、uv は (0,0) から (1,1) になります]。これを拡張して、「配置された」テクスチャを各サーフェスの領域に適用します。

同等の xyz ポリゴンを知らなくても、UV ポリゴンをステンシル バッファに直接描画できる可能性があると考えた場合、既存のコードはすべて機能します。おそらく、フレーム バッファ オブジェクトのようなトリックを使用して、ステンシル ポリゴンの最初の描画を行い、それを曲面メッシュの「実際の」描画中にステンシルとして使用することができます。それは良いアプローチでしょうか?それとももっと良い方法がありますか?

関連するサンプルへのアドバイスやURLリンクは大歓迎です... PSこれらのスレッドを見てきました...一種の関連性がありますが、まったく同じ問題ではないと思います...

opengl でステンシル レンダー バッファーをフレーム バッファーにバインドする

ステンシル バッファをテクスチャに視覚化する

私は現在、オフスクリーン シャドウ マッピング用の FBO セットアップ/使用コードをいくつか見て、この一見単純な状況で機能するようにしようとしています。私がはっきりしていないのは、必要なセットアップ gl 呼び出しです...これをセットアップする方法についてかなり混乱しています。これは、ハードウェア シャドーイング FBO セットアップの抜粋で、ビットが切り捨てられ、?? 追加...ここで正しいシーケンスに関するヘルプをいただければ幸いです。

glBindTexture(GL_TEXTURE_2D, tex); 
?? not
::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, shadowsize, shadowsize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
?? but a more normal binding approp to drawing RGBA textures 
::glBindTexture(GL_TEXTURE_2D, 0); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_Framebuffer); 

// Attach everything, tell fbo there will be a drawbuffer, unlike shadows tex draw 
// ?? use GL_COLOR_ATTACHMENT0_EXT 
glDrawBuffer(GL_NONE); 
// no color buffer dest...
??wrong glReadBuffer(GL_NONE); 
// no color buffer src 
?? glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, tex, 0); 
//??

注: tex,m_Frambufferints, textureid と framebuffer が正しく割り当てられています。ビットは問題ないと考えてください。私の混乱の主なポイントは

  1. コードは glBindTexture、glTexImage2D、glBindTexture を 0 にリリースするようです: これを早期にリリースするのは正しいですか?
  2. glDrawBuffer + glReadBuffer 呼び出しが必要ですか?
4

0 に答える 0