12

モノクロ (画像深度が 1 ビットのグラフィック データ) テクスチャを OpenGL に送り込むことは可能ですか?

私は現在これを使用しています:

glTexImage2D( GL_TEXTURE_2D, 0, 1, game->width, game->height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, game->culture[game->phase] );

GL_LUMINANCE モードで 8 ビットの符号なし整数の正方配列 (1 つの 8 ビット チャネルは 3 つのチャネルすべてと完全なアルファの明るさを表す) でポンピングしていますが、配列の onlu 値が 0x00 と 0xFF であるため、IMO は非常に効果がありません。 .

代わりに、ブール値のピクセル配列ごとに単純な1ビットを使用できますか? 配列のサイズが大きすぎると、配列に対する他の操作が遅くなります:(

4

2 に答える 2

14

いくつかの調査の後、次のコードを使用して、ピクセルあたり 1 ビットの画像をテクスチャとしてレンダリングすることができました。

static GLubyte smiley[] = /* 16x16 smiley face */
{
    0x03, 0xc0, /*       ****       */
    0x0f, 0xf0, /*     ********     */
    0x1e, 0x78, /*    ****  ****    */
    0x39, 0x9c, /*   ***  **  ***   */
    0x77, 0xee, /*  *** ****** ***  */
    0x6f, 0xf6, /*  ** ******** **  */
    0xff, 0xff, /* **************** */
    0xff, 0xff, /* **************** */
    0xff, 0xff, /* **************** */
    0xff, 0xff, /* **************** */
    0x73, 0xce, /*  ***  ****  ***  */
    0x73, 0xce, /*  ***  ****  ***  */
    0x3f, 0xfc, /*   ************   */
    0x1f, 0xf8, /*    **********    */
    0x0f, 0xf0, /*     ********     */
    0x03, 0xc0  /*       ****       */
};

float index[] = {0.0, 1.0};

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glPixelMapfv(GL_PIXEL_MAP_I_TO_R, 2, index);
glPixelMapfv(GL_PIXEL_MAP_I_TO_G, 2, index);
glPixelMapfv(GL_PIXEL_MAP_I_TO_B, 2, index);
glPixelMapfv(GL_PIXEL_MAP_I_TO_A, 2, index);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,16,16,0,GL_COLOR_INDEX,GL_BITMAP,smiley);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

結果は次のとおりです。

ここに画像の説明を入力

于 2013-03-29T15:48:02.660 に答える
8

輝度イメージの最小の非圧縮テクスチャ フォーマットは、ピクセルあたり 8 ビットを使用します。

ただし、ピクセルあたり 1 ビットのイメージは、S3TC または DXT 形式に損失することなく圧縮できます。これはまだ 1 ピクセルあたり 1 ビットではなく、2 ~ 3 ビットの間になります。

1 ピクセルあたり 1 ビットが本当に必要な場合は、ちょっとしたトリックで実現できます。8 つの 1 ビット/ピクセル テクスチャを 1 つの 8 ビット アルファのみのテクスチャとしてロードします (イメージ 1 はビット 1 にロードされ、イメージ 2 はビット 2 にロードされます)。これが完了したら、アルファ テスト機能と少しのテクスチャ環境プログラミングを使用して、各サブテクスチャに「対処」し、アルファを色に変えることができます。

これは、ピクセルあたり 1 ビットのテクスチャが 8 つあり、正しく取得するのが難しい場合にのみ機能します。

于 2008-11-29T16:02:58.410 に答える