我正在尝试在我的 c++ ImGui 菜单中渲染图像;我相信最终代码会类似于
ImGui::Image(ImTextureID, ImVec2(X, Y));
。我已经有一个字节数组,其中包含我想要渲染的图像,但不知道如何将其加载到正在传入的 ImTextureID 中。我已经找到了如何使用 D3DXCreateTextureFromFileInMemoryEx
使用 Direct X 来完成此操作,但需要了解执行此操作的 opengl 等效项。
ImGui::Image 中的“ImTextureID”只是一个 int,其值对应于图形环境(DirectX 或 OpenGL)中生成的纹理。
在 OpenGL 中执行此操作的方法如下(我不熟悉 DirectX,但我敢打赌“D3DXCreateTextureFromFileInMemoryEx”的作用几乎相同):
通常看起来像这样:
int textureID;
glGenTextures(GL_TEXTURE_2D, 1, &textureID);
glTextureParameteri(textureID, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTextureParameteri(textureID, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTextureParameteri(textureID, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTextureParameteri(textureID, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, [width of your texture], [height of your texture], false, GL_RGBA, GL_FLOAT, [pointer to first element in array of texture pixel values]);
自从我用 C++ 做这个已经有一段时间了,所以我可能在一些细节上是错误的。但文档非常好,最好还是阅读它,以了解如何使纹理与您打算输入的纹理数据类型兼容:https://www.khronos.org/registry/OpenGL-Refpages/ gl4/html/glTexImage2D.xhtml
一旦像这样设置了纹理,您就可以在 ImGui Image 调用中使用textureID 的值。