0

NPOTテクスチャをサポートしていないドライバーがまだかなりの数あることを発見したので、代わりに2Dエンジン(OpenTKに基づいており、OpenGLに基づいている)をTexture2Dサポートに後付けしようとしています。 GL_ARB_texture_rectangleに依存すること。この一環として、すべてのNPOTSテクスチャビットマップに、次の2の累乗サイズまで余分なスペースを割り当てるように強制しているため、これらのドライバーでエラーが発生することはありません。私の質問は、実際のビットマップとテクスチャのサイズを変更して、余分なメモリをすべて割り当てる必要があるのか​​、それとも2乗のサイズのテクスチャが必要であることをOpenGLに伝える方法があるのか​​、ということです。その一部は左上にありますか?

現在、私の電話は次のようになっています。

GL.TexImage2D(texTarget, 0, PixelInternalFormat.Rgba8, bmpUse.Width, bmpUse.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, bits.Scan0);

これは、bmpUseを、右と下に余分なスペースがある実際のテクスチャビットマップのコピーにした後です。

4

2 に答える 2

6

glTexImage2D空のデータで使用して、テクスチャを初期化し、glTexSubImage2Dその一部をデータで埋めます。技術的には、OpenGLでは、指定されたデータパラメータをglTexImage{1,2,3}Dnullポインタにすることができます。これは、テクスチャオブジェクトが単に初期化されることを示します。その機能がターゲット言語で引き続きサポートされているかどうかは、言語バインディングによって異なります。nullポインターを渡した場合に何が起こるかをテストするだけです。

于 2011-02-22T08:25:36.750 に答える
0

datenwolfは、部分的な画像だけでテクスチャを初期化する方法については正しいですが、これには2つの問題があることに注意する必要があります。

  • フルテクスチャの[0-1]テクスチャ範囲には、フルテクスチャではなく、初期化されていないデータも含まれるようになったため、メッシュのテクスチャ座標を再マッピングする必要があります。有用な範囲は現在[0-orig_width/padded_width]
  • テクスチャのラッピングは、サブパートではなく、テクスチャ全体のみをラッピングします。
于 2011-02-22T08:32:25.573 に答える