我試圖在DOS中創建一箇舊的等離子8bit效果動畫OpenGL版本,但我卡住了。由於幾乎所有的OpenGL程序都包含了爲Win32生成調色板的東西,我認爲在我的舊程序中應用調色板動畫並不難。OpenGL - 動畫/循環/旋轉調色板
我的目的是生成一個顏色索引不變的紋理和一個旋轉的調色板。在本週末深入網絡後,我仍然無法修復它。我甚至不能用一種顏色索引顯示紋理,所以在那個階段有些事情是錯誤的(如果它能工作,我可以創建調色板循環機制)。
我可以通過使用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);
還是應該結合使用glColorTableEXT與GL_COLOR_INDEX8_EXT?我讀過紋理調色板不支持的地方嗎?我發現其中提到調色板紋理擴展鏈接:http://www.cs.rit.edu/~ncs/Courses/570/UserGuide/OpenGLonWin-20.html
這就是我想要的(但後來在OpenGL):
http://www.codeforge.com/read/174459/PalAnimDemo.h__html
我不是在尋找ES /着色器實現(我只是一個初學者;))和DirectDraw可能會更容易我認爲,但我想嘗試OpenGL。
「*由於幾乎每個OpenGL程序都包含了一些爲Win32 *生成調色板的東西*」它有?從何時起?作爲初學者是沒有理由不使用着色器。 –