对于OpenGL片段着色器,UV y通道始终为零

问题描述 投票:-1回答:1

我正在根据教程hereHere 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;
}
c++ opengl glsl glfw glm-math
1个回答
0
投票

我希望我知道为什么人们不喜欢这个问题。我已经获得了许多赞成票,并需要关闭投票,但我不知道为什么。我只是在尝试学习编码,我以为我遵循了准则here,有些人发表了评论,但删除了他们的评论,但我不知道该怎么做才能改善此问题,因此不会发生。

我找到了问题的答案,并在opengl-tutorial.org的代码中发现了问题。这是初学者Google的“ OpenGL教程”时首先显示的网站,可能负责教成千上万的初学者游戏程序员。

如果我发布问题的答案,我鼓励Stackoverflow的居民继续像他们那样行事,这是不道德的,所以我决定不回答。祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.