我正在根据教程here(Here is a link to the GitHub)大量编写C ++程序。在教程6和7之间,UV.y坐标不再提供有意义的值。始终为0。
例如,如果将以下内容添加到教程6的片段着色器中,我将得到一个具有红色和蓝色的多维数据集,但是如果将其添加到教程7中,则会得到一个红色渐变。
color.r = UV.x;
color.g = UV.y;
color.b = 0;
这是一个问题,因为我想在着色器中使用UV.y值,但我不明白为什么它总是为0。
这是我的项目的简化着色器:
fragmentshader.glsl:
#version 330 core
in vec2 UV;
out vec4 color;
void main(){
color.r=UV.x;
color.g=UV.y;
color.b=0;
color.a=1;
}
vertexshader.glsl:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec2 vertexUV;
out vec2 UV;
uniform mat4 MVP;
void main(){
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
UV = vertexUV;
}
我用此代码设置UV坐标:
glGenBuffers(1, &m->uvbuffer);
glBindBuffer(GL_ARRAY_BUFFER, m->uvbuffer);
glBufferData(GL_ARRAY_BUFFER, m->uvs.size() * sizeof(glm::vec2), &m->uvs[0],
GL_STATIC_DRAW);
编辑1:
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, m->uvbuffer);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void *)0);
编辑2:
struct model_t {
std::string texture;
std::string filename;
GLuint Texture;
GLuint normalbuffer;
GLuint uvbuffer;
GLuint vertexbuffer;
std::vector<glm::vec2> uvs;
std::vector<glm::vec3> normals;
std::vector<glm::vec3> vertices;
}
我希望我知道为什么人们不喜欢这个问题。我已经获得了许多赞成票,并需要关闭投票,但我不知道为什么。我只是在尝试学习编码,我以为我遵循了准则here,有些人发表了评论,但删除了他们的评论,但我不知道该怎么做才能改善此问题,因此不会发生。
我找到了问题的答案,并在opengl-tutorial.org的代码中发现了问题。这是初学者Google的“ OpenGL教程”时首先显示的网站,可能负责教成千上万的初学者游戏程序员。
如果我发布问题的答案,我鼓励Stackoverflow的居民继续像他们那样行事,这是不道德的,所以我决定不回答。祝你好运。