我在opengl中设置我的纹理参数,如下所示:
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_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);`
//glGenerateMipmap(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
我的纹理数据是:
checker[0] = checker[1] = checker[2] = 255;
checker[3] = checker[4] = checker[5] = 0;
checker[6] = checker[7] = checker[8] = 255;
checker[9] = checker[10] = checker[11] = 0;
我的纹理位于GL_RGB中并且采用GL_UNSIGNED_BYTE。我将纹理的宽度和高度设置为2,我的坐标放置纹理由两个三角形组成,形成一个正方形并填满整个屏幕。
然而,我得到一个灰色而不是两个黑色和两个白色像素。 RGB的灰色颜色非常漂亮128,127,127。我读到我应该为每种颜色的检查器添加一个填充字节,但这给了我一种桃色。
编辑:
我发现了一个错误,但现在我得到了一个白屏。
所以我删除了
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
现在我得到一个黑屏。
这是我的绘图功能:
glUseProgram(gfx->shaderProgramTexture);
glBindTexture(GL_TEXTURE_2D, tex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
2, 2, GL_RGB, GL_UNSIGNED_BYTE, data);
glBindBuffer(GL_ARRAY_BUFFER,
gfx->vertexBufferTexture);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
gfx->clearScreen();
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindTexture(GL_TEXTURE_2D, 0);
glfwSwapBuffers(gfx->getWindow());
答案 0 :(得分:-1)
您没有提到纹理坐标的来源。使用错误的纹理坐标可能会导致呈现完全白色或完全黑色的内容,例如,如果您始终采样相同的像素。如果纹理坐标正好位于像素之间,则可能会在没有GL_NEAREST的情况下变灰。