2011-11-30 91 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