从着色器

时间:2016-11-15 18:25:14

标签: c++ opengl

这似乎是一个基本问题,但是如何使用/操作在OpenGL中使用着色器创建的对象?

我总是需要不同对象的坐标,在我的宿主程序中使用,根据这些坐标创建/操作不同的对象,然后将它们发送回顶点/片段/几何着色器。

我有我在主程序中定义的初始顶点坐标,但是一旦到达几何着色器,就会通过以下方式计算位置:

gl_Position = projection_matrix * view_matrix * vec4(square_point,1);
EmitVertex();

现在,例如,我需要在屏幕上用鼠标选择并移动它们。但是我没有简单的方法可以想到获得精确的坐标。 我试图在我的主程序中进行位置数学运算,但我似乎没有得到与几何着色器计算的坐标相同的坐标。并且计算CPU上的所有数据对于我拥有的对象数量来说并不是最佳的。

我已经想过通过缓冲区进行一些GPU-> CPU数据检索,但是有太多的对象和很多坐标,它是无情的。

我想有另一种方法可以解决这个问题,只是因为我可能没有正确的OpenGL工作原理。

1 个答案:

答案 0 :(得分:0)

您可以使用所谓的着色器存储缓冲区对象SSBO。您可以使用buffer限定符在着色器中创建它们。然后,您可以通过glMapBufferRangememcpy进行必要的计算并下载数据。