2011-11-30 60 views
1

請幫我理解下面的操作。具體來說,什麼是變量'c',第三個數組的維數是多少(不是一個二維像素矩形的圖像)? 如果需要上下文,我會發布此代碼的鏈接,但上下文通常會將此棋盤圖案映射到旋轉的多維數據集。爲紋理創建棋盤圖像

GLubyte image[TextureSize][TextureSize][3]; 
GLubyte image2[TextureSize][TextureSize][3]; 

// Create a checkerboard pattern 
for (int i = 0; i < 64; i++) { 
    for (int j = 0; j < 64; j++) { 
     GLubyte c = (((i & 0x8) == 0)^((j & 0x8) == 0)) * 255; 
     image[i][j][0] = c; 
     image[i][j][1] = c; 
     image[i][j][2] = c; 
     image2[i][j][0] = c; 
     image2[i][j][1] = 0; 
     image2[i][j][2] = c; 
    } 
} 

回答

2

圖像是2個空間維度和顏色 - 所以3個維度的方式。
最後一個[]是紅色,綠色和藍色像素值

這只是使用'c'數組語法來爲你計算進入內存。

在存儲器中的佈局僅僅是 [row1][col1][red], [row1][col1][green], [row1][col1][blue], [row1][col2][red], [row1][col2][green], [row1][col2][blue] ........

所以如果c爲0或255,那麼

// sets all red,green,blue to same value = black (c=0) or white (c=255) 
image[i][j][0] = c; 
image[i][j][1] = c; 
image[i][j][2] = c; 

// sets red and blue on but green off = purple 
image[i][j][0] = c; 
image[i][j][1] = 0; 
image[i][j][2] = c; 
+0

阿所以「C」是一個RGB分量,其值依賴於空間索引,以及用於每個空間索引'c'== R == G == B?任何想法爲什麼一個G組件被設置爲0? – Rooster

+1

@bbarre:幾乎:'c'是由數組運行變量構造的變量。如果你仔細觀察,你會發現如果我的第三位被設置,即i的每8次迭代,i&0x8就產生非零。 j也一樣。如果其中任一個非零,但另一個爲零,則異或將產生1.這被乘以255,即通道的最大值。未設置image2的綠色組件將使粉色和黑色瓦片而不是白色和黑色。 – datenwolf