我正在嘗試在我的 c ImGui 選單中渲染影像;我相信最終代碼將類似于ImGui::Image(ImTextureID, ImVec2(X, Y));. 我已經有一個位元組陣列,其中包含我要渲染的影像,但不知道如何將其加載到正在傳入的 ImTextureID 中。我已經找到了如何使用 Direct X 來做到這一點,D3DXCreateTextureFromFileInMemoryEx但需要知道opengl 等效于執行此操作。
uj5u.com熱心網友回復:
ImGui::Image 中的“ImTextureID”只是一個 int,其值對應于在圖形環境(DirectX 或 OpenGL)中生成的紋理。
在 OpenGL 中這樣做的一種方法如下(我不熟悉 DirectX,但我敢打賭 'D3DXCreateTextureFromFileInMemoryEx' 幾乎相同):
- 使用 glGenTextures() 生成紋理名稱(這個“名稱”只是一個整數,它是 ImGui 用作 ImTextureID 的整數)
- 使用 glTexParameteri() 為新生成的紋理設定 UV 采樣引數
- 使用 glBindTexture() 將紋理系結到當前活動的紋理單元
- 使用 glTexImage2D() 將像素資料上傳到 GPU
通常看起來像這樣:
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 的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415764.html
標籤:
