3

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

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

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

4

6 に答える 6

2

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

于 2008-11-25T18:05:02.030 に答える
1

将来これに出くわす人のために追加できるとしたら、Webで見つけたOpenGLに関するドキュメントとチュートリアル/例のほとんどは、nehe.gamedevのものを含め、何年も前のものであり、あなたを信じさせるでしょう非 2 の累乗のテクスチャ サイズなどは、実際にはそうでない場合に問題になるか、廃止されてから長い間使用されていない opengl 関数や、10 年間更新されていないライブラリを使用することをお勧めします。

于 2010-04-02T06:41:23.263 に答える
1

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

于 2009-01-05T16:22:34.153 に答える
0

まず第一に、ほとんどの最新のビデオカードは、実際には、非正方形で非2乗のサイズのテクスチャ寸法をサポートしています。ただし、互換性を最大にするために、2つのテクスチャのパワーのみを使用することをお勧めします。

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

于 2008-11-25T18:03:05.500 に答える
0

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

于 2008-12-29T16:58:39.807 に答える
0

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

于 2008-12-29T16:51:17.013 に答える