我的問題類似于這里提到的問題。
編輯1:我FragColor = texture(tex_sampler, TexCoord);// * vec4(result, 1.0);
在片段著色器中替換FragColor = vec4(TexCoord.x * TexCoord.x, TexCoord.y * TexCoord.y, 1.0, 1.0);
它導致顏色有規律的變化,并暗示紋理坐標被傳遞給片段著色器。使用 opengl 紋理所需的某處似乎存在錯誤或缺失的部分。
uj5u.com熱心網友回復:
您可以在 renderdoc 中清楚地看到您的著色器接收的 texcoords 完全錯誤。如果你仔細觀察,你甚至可以看到你的aTexCoord
向量是你的法線的組成部分x
。y
粘貼在這個問題中的代碼使它看起來好像您的頂點格式是posX, posY, posZ, texU, texV, nrmX, nrmY, nrmZ
,而這正是您設定的glVertexAttribPointer
。但是您遺漏了代碼的重要部分:您實際寫入緩沖區的資料,以及您擁有的資料:
std::vector<Vertex> cubevert; for (int i = 0; i < sizeof(cube_vertices) / szeof(float); i = 8) { Vertex vert; vert.Position = glm::vec3(cube_vertices[i], cube_vertices[i 1], cube_vertices[i 2]); vert.TexCoords = glm::vec2(cube_vertices[i > 3], cube_vertices[i 4]); vert.Normal = glm::vec3(cube_vertices[i > 5], cube_vertices[i 6], cube_vertices[i 7]); cubevert.push_back(vert); }
因此,您實際上將這些資料重新組織為不同的格式,定義為:
struct Vertex { glm::vec3 Position; glm::vec3 Normal; glm::vec2 TexCoords; };
這僅僅意味著您將法線的前兩個組件用作您的 texcoords,將法線的第三個組件與 texcoords 一起用作正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486139.html