好吧,我需要創建自己的紋理/圖像數據,然後將其顯示到OpenGL中的四邊形上。我有四工作,我可以用我自己的紋理加載器將TGA文件顯示在它上面,並且它完美地映射到四邊形。OpenGL紋理格式,爲OpenGL創建圖像/紋理數據
但是,如何爲每個像素創建自己的「自制圖像」,即1000x1000和3個通道(RGB值)?紋理數組的格式是什麼,例如我如何將像素(100,100)設置爲黑色?
這是我怎麼會想象它爲全白圖像/紋理:
#DEFINE SCREEN_WIDTH 1000
#DEFINE SCREEN_HEIGHT 1000
unsigned int* texdata = new unsigned int[SCREEN_HEIGHT * SCREEN_WIDTH * 3];
for(int i=0; i<SCREEN_HEIGHT * SCREEN_WIDTH * 3; i++)
texdata[i] = 255;
GLuint t = 0;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &t);
glBindTexture(GL_TEXTURE_2D, t);
// Set parameters to determine how the texture is resized
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR);
// Set parameters to determine how the texture wraps at edges
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_WRAP_S , GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_WRAP_T , GL_REPEAT);
// Read the texture data from file and upload it to the GPU
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCREEN_WIDTH, SCREEN_HEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texdata);
glGenerateMipmap(GL_TEXTURE_2D);
編輯:下面的答案是正確的,但我也發現,OpenGL的不處理,我用正常的整數,但它的工作原理罰款與uint8_t。我認爲這是因爲GL_RGB與我上傳到GPU時使用的GL_UNSIGNED_BYTE(只有8位,正常的int不是8位)標誌一起使用。
我不明白,你嘗試過這樣做?你只需要傳遞一大塊包含數據而不是圖像數據的字節。顯示如何將數據從您的圖像加載器傳遞到GL紋理的後代碼,然後嘗試將自制圖像數據傳遞到紋理,並告訴我們什麼不起作用。 – zero298
我意識到你需要專門爲OpenGL創建無符號的8位整數來正確解釋它們作爲RGB值。我真的一直在嘗試這個好幾天,並設法解決它,就像我決定發佈這個之後的2分鐘一樣...... – Jackbob
Eh,'GL_UNSIGNED_INT'也是一個有效的'glTexImage2D()'''type'',你會只需將色彩通道範圍從[0,2^8-1]擴展到[0,2^32-1]即可。 – genpfault