glfw3 - 此绘制调用完全不在视锥体

时间:2015-10-10 05:56:37

标签: opengl opengl-4

我遇到一个非常小的OpenGL 4.4应用程序的奇怪问题。

在我们开始之前是基础知识。

片段着色器

#version 440
out vec4 color;
void main(void)
{
  color = vec4(1.0, 0.0, 0.0, 1.0);
}

顶点着色器

#version 440
layout(location = 0) in vec2 P;
void main(void)
{
  gl_Position = vec4(P, 0.0, 1.0);
}

VBO

  GLuint vbo;
  glGenBuffers(1, &vbo);
  glBindBuffer(GL_ARRAY_BUFFER, vbo);
  constexpr std::array<GLfloat, 12> vertex = 
  {
      -1.0f,  0.0f,
      -1.0f, -1.0f,
       0.0f,  0.0f,
       0.0f,  0.0f,
      -1.0f, -1.0f,
       0.0f, -1.0f

  };
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertex[0]) * vertex.size(), vertex.data(), GL_STATIC_DRAW);

VAO

GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);

绘图命令

glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, vertex.size());

基于以上所述,我希望在屏幕的左下角看到一个红色框。

我尝试了什么

起初我认为它们必须是顶点数据的问题,并且它在GPU上是不正确的。但是,使用NSight,我可以确认我的顶点数据正确地将其转换为GPU。

enter image description here

让我感到困惑的是我从Nsight获得的错误消息。我的抽奖活动完全脱离了视角。

enter image description here

这让我感到困惑,因为我在设备规范化坐标中传递了顶点数据。唯一的剪辑应该是在创建glfw窗口时设置的视口。

使用OpenGL已经有一段时间了。我确信他们是我忽略的一件小事,但没有任何错误被报道我被卡住了。

1 个答案:

答案 0 :(得分:0)

女士们,先生们,这正是我所怀疑的。我忘了做一件小事。

glEnableVertexAttribArray

我从未启用过我的顶点数据。