OpenGL纹理映射不映射

时间:2014-10-24 22:32:57

标签: c++ opengl opengl-es

我正在创建一个平面并为其应用纹理。但由于某种原因,纹理没有得到正确应用。我得到的是这样的东西。

This is what the output looks like 这是我正在使用的代码(我有一个用于应用纹理的类),

for(int i = 0; i < 512; i++) {
    for(int j = 0; j < 512; j++) {
        int c = ((((i&0x8)==0)^(((j&0x8))==0)))*255;

        checkImage[i][j][0] = (GLubyte) c;
        checkImage[i][j][1] = (GLubyte) c;
        checkImage[i][j][2] = (GLubyte) c;
        checkImage[i][j][3] = (GLubyte)255;
        //cout<<"("<<(int)dataForPixel.rgbtRed<<","<<(int)dataForPixel.rgbtGreen<<","<<(int)dataForPixel.rgbtBlue<<")";
    }
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,       GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,       GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,   GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,   GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             imageX,
             imageY,
             0,
             GL_RGBA,
             GL_UNSIGNED_BYTE,
             checkImage
);

glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glBindTexture(GL_TEXTURE_2D, texName);

glBegin(GL_QUADS);
glTexCoord2d(0.0, 0.0); glVertex3d(-100, -100,  0.0);
glTexCoord2d(0.0, 1.0); glVertex3d(-100,  100,  0.0);
glTexCoord2d(1.0, 1.0); glVertex3d( 100,  100,  0.0);
glTexCoord2d(1.0, 0.0); glVertex3d( 100, -100,  0.0);
glEnd();

图像为512 x 512图像。

为什么纹理无法正确应用。

更新: c值仅用于制作棋盘图案,其由8像素宽度和交替黑白高度的正方形组成。

1 个答案:

答案 0 :(得分:0)

好的我发现了问题。似乎我试图动态分配checkImage内存但不是一次性。因此,OpenGL没有打扰内存中的空白。

一旦我修复它以将内存分配为一个大块,它就可以工作。