0
这可能看起来像一个基本问题,但是如何处理/操作在OpenGL中通过着色器创建的对象?从着色器操纵OpenGL对象
我总是需要不同的对象的坐标,以便在我的宿主程序中使用,根据这些坐标创建/操作不同的对象,然后将它们发送回顶点/片段/几何着色器。
我有我最初的顶点坐标,我在我的主要程序定义,但一旦他们达到了几何着色器,该位置是通过计算:
gl_Position = projection_matrix * view_matrix * vec4(square_point,1);
EmitVertex();
而现在,例如,我需要在屏幕上选择并用鼠标移动它们。但是我不能想象得到确切坐标的简单方法。 我试图在我的主程序中进行位置数学运算,但我似乎没有得到与几何着色器计算出的坐标相同的坐标。并且计算CPU上的所有数据对于我拥有的对象数量来说并不是最佳的。
我曾经想过通过缓冲区来做一些GPU-> CPU数据检索,但是有太多的对象和很多坐标,以至于它是无情的。
我想有另一种方法来解决这个问题,只是我可能没有OpenGL的工作原理。
你是否正确地处理转换后的'w'坐标?这是在Geometry Shader运行之后发生的一个步骤(将所有4个向量组件分开)。如果您捕获发射的顶点并比较这些顶点,它们将不会执行此步骤。 –
@ AndonM.Coleman - 我不这么认为。我正在应用我提出的确切公式。 –