【发布时间】:2014-10-17 18:18:21
【问题描述】:
我在 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());
【问题讨论】:
-
设置参数的时候确定贴图绑定了吗?我们需要更多代码来调试它。
-
@ColonelThirtyTwo 完成
-
你把
GL_UNPACK_ALIGNMENT设置成什么了? -
对于一个你应该将 min/mag 过滤器保持在
GL_NEAREST但你能告诉我们你的纹理坐标和着色器吗? -
另外,你正在做什么来使它成为“全屏四边形”而不是非常大的四边形?