【问题标题】:OpenGL not rendering half the points [closed]OpenGL没有渲染一半的点[关闭]
【发布时间】:2019-04-14 16:11:18
【问题描述】:

我正在尝试构建一个简单的 y=x 曲线,其中 -0.5

代码在这里: https://github.com/abhimittal664/opengl

我不完全确定,但这可能是由于 MVP 矩阵造成的吗?我试过用它们做实验,但没有用。

另外,有没有办法调试着色器文件中的问题?我在英特尔集成显卡机器上使用 Visual Studio 2017。看起来 Visual Studio 图形调试器仅适用于 Directx。目前我只是尝试通过输出不同颜色的点来进行调试以获得视觉提示。

谢谢

编辑 1: y = x 函数在顶点着色器中。顶点缓冲区只有 x 值,y,z = 0。

【问题讨论】:

  • y=x 函数在顶点着色器文件中。这只会生成 x 值
  • 啊,我明白了。如果 x > 0 则颜色为红色,如果 x
  • 我把背景设为白色。添加了调试用的彩线,但是如果你运行代码,x > 0 是不显示的,这就是问题,即黑色可见但没有红色点

标签: c++ opengl rendering glm-math


【解决方案1】:

从链接中提取到您的代码:

//Vertex buffer definition
struct vertex {
    glm::vec3 position;
    glm::vec3 color;
};

void populate_vertex_buffer(vertex* vertices, int n_vertices) {
    ...
    for (int x = 0; x < n_vertices; x++) {
        count = -0.5f + (1.f / n_vertices)*(float)x;
            vertices[x].position = glm::vec3((-0.5f + (1.f / n_vertices)*(float)x), 0, 0);
            vertices[x].color = glm::vec3(0.0, 0.0, 0.0);
    ...

所以缓冲区中的数据是 XYZRGBXYZRGBXYZRGB...... 其中 Y,Z,R,G,B all = 0)

你告诉驱动如何读取这个缓冲区:

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
...
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)offsetof(vertex, color));

注意第二个glVertexAttribPointer。它告诉第二个属性(VS 中的vc)从位置offsetof(vertex, color) 开始,然后每种颜色都与前一个颜色相邻(第五个参数= 0)。这对于像 XYZXYZXYZ......RGBRGBRGBRGB...这样的缓冲区数据很有用。

我认为阅读说明会是

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), NULL);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), 3*sizeof(float);

6 来自两个相同属性之间的六个值 XYZRGB。

【讨论】:

  • 谢谢。做到了。我不知道这个,所以肯定是新信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多