glfw3 - 这个绘图调用完全不在视锥体中

Posted

技术标签:

【中文标题】glfw3 - 这个绘图调用完全不在视锥体中【英文标题】:glfw3 - This draw call is entirely out of view frustum 【发布时间】:2015-10-10 05:56:36 【问题描述】:

我在一个非常小的 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。

真正让我感到困惑的是我从 Nsight 收到的错误消息。我的绘图调用完全不在视锥体中。

这让我很困惑,因为我在设备标准化坐标中传递顶点数据。唯一的剪辑应该来自创建 glfw 窗口时设置的视口。

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

【问题讨论】:

【参考方案1】:

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

glEnableVertexAttribArray

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

【讨论】:

以上是关于glfw3 - 这个绘图调用完全不在视锥体中的主要内容,如果未能解决你的问题,请参考以下文章

关于 Direct2D 绘图调用中的多线程

基于视锥体(平截体)的OpenGL ES性能优化

Seaborn Facet Grid 'col=' 不在 Jupyter Notebook 中并排创建绘图

使用 OpenGL 绘图而不杀死 CPU 并且不并行化

unity overdraw 多少合理

绘图工作在onDrawForeground但不在onDraw中