openGL显示多个对象

时间:2017-03-12 07:59:40

标签: c++ opengl vertex-shader

我使用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个对象(其顶点存储在位置0 中)。如果我写layout (location = 0) in vec3 a_vertex;,也会发生同样的情况。

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

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

P.S。:我认为Multiple objects drawing (OpenGL) 上一个问题包含答案,但解释是如此之高,以至于我无法将其转换为代码。

1 个答案:

答案 0 :(得分:0)

您误解了着色器位置是什么以及它们用于什么。位置是传递给着色器的同一顶点内的单独属性的指示符。颜色是属性并具有位置。曲面法线是一个属性并具有一个位置。纹理坐标是一个属性......你得到了这个想法。

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