古いプラズマ 8 ビット エフェクト アニメーションの OpenGL バージョンを DOS で作成しようとしましたが、行き詰まりました。ほとんどすべての OpenGL プログラムには、Win32 用のパレットを生成するためのものが含まれているので、古いプログラムにパレット アニメーションを適用するのはそれほど難しくないと思いました。
私の目的は、変化しないカラー インデックスと回転するパレットを持つテクスチャを生成することです。今週末、ウェブを掘り下げた後も、まだ修正できません。1 つのカラー インデックスでテクスチャを表示することさえできないので、その段階で何かが間違っています (機能する場合は、パレット サイクリング メカニズムを作成できます)。
PFD_TYPE_COLORINDEX を使用して強制的にパレット モードにし、glIndexi を使用してランダムなピクセルを描画できます。glDrawPixels と glReadPixels は遅く、後者はフレームバッファからピクセルを取得するときにそれほど正確ではないことを読みました(丸めエラーなどの結果として位置が不正確になるため)。
GL_COLOR_INDEX キーワードを試しました。私も試しました: glPixelTransferi(GL_MAP_COLOR, true); glPixelMapfv( GL_PIXEL_MAP_I_TO_R, ...); glTexImage2D...これまでに試したコードの一部(最新の変更):
初期部分:
void* rawplasma;
GLuint plastexture;
rawplasma = (void*) malloc(256*256);
memset(rawplasma,rand()%256,256*156);
glEnable( GL_TEXTURE_2D );
glGenTextures(1, plastexture);
glBindTexture(GL_TEXTURE_2D, plastexture);
glTexImage2D( GL_TEXTURE_2D, 0, GL_COLOR_INDEX, 256, 256, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, rawplasma );
更新/描画:
float Rmap[256];
float Gmap[256];
float Bmap[256];
float Amap[256];
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
memset(rawplasma,rand()%256,256*256); //check if it works
glTexImage2D( GL_TEXTURE_2D, 0, GL_COLOR_INDEX, 256, 256, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, rawplasma );
glBindTexture(GL_TEXTURE_2D, plastexture );
/*
glPixelTransferi( GL_MAP_COLOR, GL_TRUE );
glPixelMapfv(GL_PIXEL_MAP_I_TO_R,mapSize,Rmap);
glPixelMapfv(GL_PIXEL_MAP_I_TO_G,mapSize,Gmap);
glPixelMapfv(GL_PIXEL_MAP_I_TO_B,mapSize,Bmap);
glPixelMapfv(GL_PIXEL_MAP_I_TO_A,mapSize,Amap);
glPixelTransferi(GL_MAP_COLOR,GL_TRUE);
*/
glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0); glVertex2f(-1.0, -1.0);
glTexCoord2f(0.0, 0.0); glVertex2f( 1.0, -1.0);
glTexCoord2f(0.0, 1.0); glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, 1.0); glVertex2f(-1.0, 1.0);
glEnd();
glFlush();
SwapBuffers(hDC);
または、GL_COLOR_INDEX8_EXT と組み合わせて glColorTableEXT を使用する必要がありますか? テクスチャ パレットがサポートされていないことをどこかで読みましたか? Paletted Texture Extension について言及しているリンクを見つけました: http://www.cs.rit.edu/~ncs/Courses/570/UserGuide/OpenGLonWin-20.html
これは私が欲しいものです(ただし、OpenGLで):
http://www.codeforge.com/read/174459/PalAnimDemo.h__html
私は ES/Shader の実装を探しているわけではありません (私はただの初心者です ;))、DirectDraw の方が簡単かもしれませんが、OpenGL を試してみたいと思っています。