openGL 显示多个对象

openGL displaying multiple objects

我正在使用 openGL 3.3 在 window 中绘制 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 个对象(其顶点存储在 位置 0)。如果我写 layout (location = 0) in vec3 a_vertex;.

也会发生同样的情况

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

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

P.S.: 我觉得Multiple objects drawing (OpenGL) previous question 包含答案,但解释太高了,我无法将其翻译成代码。

您误解了着色器位置 的含义及其用途。位置是传递给着色器的同一顶点内的单独属性的指示符。颜色是一种属性并且具有位置。表面法线是一个属性并且有一个位置。纹理坐标是一个属性......好吧你明白了。

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