7

私はこの問題を数回経験しました。スプラッシュ スクリーンなどを OpenGL コンテキスト (または DirectX、それは概念的なもの) で表示したい場合、2048x2048 テクスチャをロードして、グラフィック カードが対応することを期待することができます。しかし、昔ながらのグラフィックス カードを使って成長していると、この悪い良心が私に寄りかかって、それほど大きなテクスチャを使用するべきではないと言っています。

現在、好ましい方法は何ですか?それをビデオ メモリに詰め込むか、並べて表示するか、CPU に作業と glDrawPixels を任せるか? それとももっと手の込んだもの?

4

2 に答える 2

10

これがアニメーションのない単一フレームのスプラッシュ画像である場合、 を使用しても害はありませんglDrawPixels。パフォーマンスが重要であり、テクスチャを使用する必要がある場合は、プロキシ テクスチャを使用して、サポートされているテクスチャの最大サイズを実行時に決定するのが正しい方法です。

GLint width = 0;
while ( 0 == width ) {  /* use a better condition to prevent possible endless loop */
    glTexImage2D(GL_PROXY_TEXTURE_2D, 
                      0,                /* mip map level */
                      GL_RGBA,          /* internal format */
                      desiredWidth,     /* width of image */
                      desiredHeight,    /* height of image */
                      0,                /* texture border */
                      GL_RGBA           /* pixel data format, */ 
                      GL_UNSIGNED_BYTE, /* pixel data type */
                      NULL              /* null pointer because this a proxy texture */
    );

    /* the queried width will NOT be 0, if the texture format is supported */
    glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

    desiredWidth /= 2; desiredHeight /= 2;
}

システムの OpenGL ドライバーでサポートされているテクスチャの最大サイズがわかったら、画像が収まらない場合に少なくとも 2 つのオプションがあります。

  • 画像のタイリング: 画像をサポートされている小さなチャンクに分割した後、複数のクワッドを使用します。スプラッシュ スクリーンのような画像のタイリングは、それほど難しいものではありません。glPixelStoreiのパラメータを使用GL_PACK_ROW_LENGTHして、より大きな画像のセクションをテクスチャにロードできます。
  • 画像のサイズ変更: サポートされているテクスチャの最大サイズに合わせて画像のサイズを変更します。これを行うための GLU ヘルパー関数 gluScaleImageもあります。
于 2009-01-08T20:28:08.260 に答える
0

組み込みのopengl関数はないと思いますが、ライブラリを見つけて(または関数を自分で作成して)、画像を小さなチャンクに分割し、印刷して小さなチャンク(128x128タイルなど)を表示することができます。

JavaゲームにSlick2Dを使用すると、これに問題がありました。ここでアイデアの "BigImage" クラスをチェックできます。

于 2009-01-08T20:16:19.953 に答える