【问题标题】:openGL displaying multiple objectsopenGL显示多个对象
【发布时间】:2017-03-12 07:59:39
【问题描述】:

我正在使用 openGL 3.3 在一个窗口中绘制 4 个多边形。我的程序计算 2 个多边形(m 和 n 边)的顶点,并应用一些变换来绘制和动画 2 个 m 边和 2 个 n 边的多边形。

我的问题是我需要将 2 个多边形的顶点存储在不同的内存位置,因为我想应用不同的转换,但我无法从我的顶点着色器中检索和显示这两个对象。

#version 330

in vec3 a_vertex;
uniform mat4 transform;

void main(void)
{
    gl_Position = transform * vec4(a_vertex, 1.0);
}

此着色器仅显示前 2 个对象(其顶点存储在 location 0)。如果我写layout (location = 0) in vec3 a_vertex;,也会发生同样的情况。

否则写layout (location = 1) in vec3 a_vertex;我只能看到另外两个多边形(其顶点存储在位置1)。

这似乎是合理的。现在我的问题是:如何显示所有 4 个多边形?

P.S.:我认为Multiple objects drawing (OpenGL) 上一个问题包含答案,但解释太高级了,我无法将其翻译成代码。

【问题讨论】:

  • 这与硬件加速实例有关吗?

标签: c++ opengl vertex-shader


【解决方案1】:

您误解了着色器位置是什么以及它们的用途。位置是传递给着色器的同一顶点内不同属性的指示符。颜色是一个属性并且有一个位置。表面法线是一个属性并且有一个位置。纹理坐标是一个属性,而且……你明白了。

然而,你所拥有的是不同个顶点。您所要做的就是简单地为您的不同顶点进行绘制调用。只需多次调用glDraw… 或将所有不同的顶点放入一个缓冲区并一次绘制它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多