質問

テクスチャを使用してopenglで2D画像を表示する必要があります。
画像の寸法は必ずしも2の累乗ではありません。
より大きなテクスチャを作成し、使用する部分に表示を制限することを考えましたが、画像データはopenCVと共有されるため、一度に1ピクセルずつデータをより大きなテクスチャにコピーしたくありません。

編集-Windowsで最も単純なIntelオンボードグラフィックスでも、2の累乗なしのテクスチャをサポートしていることがわかりました。

EDIT2-arbテクスチャサイズがない場合でも、画像を小さくしてウィンドウサイズに再スケーリングすると、ローエンドハードウェアでも非常に高速です

役に立ちましたか?

解決

GL拡張機能がいくつか思い浮かびます。 GL_ARB_texture_rectangle をご覧ください(ミップマッピングが不要な場合) 、または GL_ARB_texture_non_power_of_two (その場合)。

他のヒント

避けるべき落とし穴の1つは、何らかの理由で、2のべき乗でないテクスチャを正しくロードするために、GL_UNPACK_ALIGNMENTを1(glPixelStorei(GL_UNPACK_ALIGNMENT、1);)に設定する必要があるビデオカードがあることです。

将来これに出くわした人のために追加できるなら、OpenGLについてのWebで見られるドキュメントとチュートリアル/例のほとんどは、nehe.gamedevのものを含め、何年も古いものであり、あなたを導くでしょう2のべき乗ではないテクスチャサイズのようなものが現実的にそうでない場合に問題であると考えるか、10年以上更新されていない非推奨のopengl関数またはライブラリを長く使用することをお勧めします。

まず、最新のビデオカードのほとんどは、非正方形および非べき乗の両方のサイズのテクスチャ寸法を実際にサポートしています。ただし、互換性を最大限に高めるには、おそらく2のべき乗のテクスチャのみを使用することをお勧めします。

最初に、画像の寸法(幅と高さ)ごとに大きい最も近い2のべき乗を決定し、そのサイズのテクスチャを作成します。 次に、2つのオプションがあります。最初の方法は、画像に合わせてソフトウェアでピクセルデータのサイズを変更し、表示する必要があるときに元のアスペクト比に従ってクワッドのサイズを変更することです。または、画像データでテクスチャの一部を塗りつぶし、残りの部分に透明ピクセルを配置することもできます。

2のべき乗のテクスチャを使用する場合は、画像を使用できる最小のテクスチャを作成し、適切なテクスチャ座標を計算して、画像を含むテクスチャの部分のみを表示します。例えば。画像が400x300の場合、512x512のテクスチャを使用し、そこに画像を1行ずつコピーします。右のテクスチャ座標は400.0 / 512.0で、低い方は300.0 / 512.0です。それはソフトウェアのスケーリングよりも良く見えるでしょう。

あなたが説明したとおりに行い、2のべき乗のテクスチャにコピーし、それに応じてUVを調整します。拡張機能は便利ですが、任意のコンピューターでサポートされているとは限りません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top