2-设置贴图的颜色通道
我在尝试将纹理贴图(如深度贴图)传递给ImGui时,发现它把RGB都显示出来了,如下:
查阅相关资料后,发现可以用 swizzling (GL_TEXTURE_SWIZZLE_RGBA
)来解决。
// Texture must be bound first
tex->bind(1);
GLint swizzle[4] = {
GL_RED, // Shader Red channel source = Texture Red
GL_RED, // Shader Green channel source = Texture Green
GL_RED, // Shader Blue channel source = Texture Blue
GL_ONE // Shader Alpha channel source = One
};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
tex->unbind();
如上述代码所示,我们可以通过swizzle
操作去主动设定纹理的输出通道,上边我们把纹理的RGBA改成RRR1,这样输出结果就是我们想要的:
我去,贴图怎么反了,应该是ImGui::Image()
的问题,解决办法是修改它的参数:
// 修改前
ImGui::Image((void*)my_texture, ImVec2(256, 256), ImVec2(0.0f, 0.0f), ImVec2(1.0f, 1.0f)); // Default coordinates
// 修改后(翻转一下UV)
ImGui::Image((void*)my_texture, ImVec2(256, 256), ImVec2(0.0f, 1.0f), ImVec2(1.0f, 0.0f)); // Flip Y coordinates
参考资料
- How to disable alpha in ImGui::Image? · Issue #4730 · ocornut/imgui (github.com)
- glTexParameter - OpenGL 4 - docs.gl