我使用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) 上一个问题包含答案,但解释是如此之高,以至于我无法将其转换为代码。
答案 0 :(得分:0)
您误解了着色器位置是什么以及它们用于什么。位置是传递给着色器的同一顶点内的单独属性的指示符。颜色是属性并具有位置。曲面法线是一个属性并具有一个位置。纹理坐标是一个属性......你得到了这个想法。
你所拥有的是不同的顶点。您所要做的就是为您的不同顶点进行绘制调用。只需多次调用glDraw…
或将所有不同的顶点放入一个缓冲区中,然后立即绘制它们。