opengl instanced drawing - 3D箭头

时间:2017-03-09 15:19:47

标签: c++ opengl

我必须画出数百万支箭。我的信息如下。

  • 每个箭头的位置

  • 每个箭头的方向(矢量方向)

  • 每个箭头的长度

有了这些信息,我可以使用opengl实例绘制来绘制箭头。

我已经完成了实例化示例。在所有这些例子中,他们已经解释了每个实例的矩阵变换等。

但是,根据上述数据,我不清楚是否可以这样做。

1 个答案:

答案 0 :(得分:1)

鉴于箭头是一个矢量,你可以将所有矢量数据插入一个统一的数组**并使用gl_InstanceID在你的顶点着色器中查找它们并简单地将它们传递给gl_Position。

如果需要对箭头应用变换(通过查看数据:位置的平移,方向的旋转和长度的缩放),您将在单个顶点集上发出实例绘图语句(您的基本箭头),使用一个统一的矩阵数组进行转换,并在顶点着色器中以类似的方式查找这些矩阵。

**根据您拥有的实例数量,数据可能不适合统一数组。所以你可以考虑使用Uniform块(允许你存储比简单统一变量更多的数据),如果这还不够,GL_TEXTURE_BUFFER就可以了。 不要让名字欺骗你,GL_TEXTURE_BUFFER可以保存任意数据,而不仅仅是纹理数据。

统一块由https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object

支持

对于纹理缓冲区,请读出https://www.khronos.org/opengl/wiki/Buffer_Texture