2

我正在尝试使用 OpenGL(出于性能原因)来绘制散点图。我对 2D 和 3D 都感兴趣。

我有哪些样式标记选项,例如使不同的组可见?

显然我可以改变颜色。但在“传统”散点图中,也使用圆形、加号、Xes、框等 - 我如何在 OpenGL 散点图中最好地实现这些?

我是否应该将所需的 2D 标记渲染为一个小纹理,然后为每个标记绘制一个带有纹理的三角形?我可以将纹理仅用于 Alpha,但使用动态颜色吗?(例如有纹理=类,颜色=其他分数)?

在 OpenGL 中是否有任何我在常规绘图库(例如 gnuplot)中没有的样式标记的更酷方法?

任何性能提示?显示列表或顶点缓冲区?

4

2 回答 2

4

这是很多问题。让我一一解决。

我有哪些样式标记选项,例如使不同的组可见?

颜色、形状、大小,甚至动画。

显然我可以改变颜色。但在“传统”散点图中,也使用圆形、加号、Xes、框等 - 我如何在 OpenGL 散点图中最好地实现这些?

广告牌精灵(教程)。这个想法是绘制一个小四边形,使其始终面向相机。这种旋转可以在 CPU 上完成,但如果相机移动并且您需要在每一帧重新计算它,那么在顶点着色器中执行它可能会更快。

我是否应该将所需的 2D 标记渲染为一个小纹理,然后为每个标记绘制一个带有纹理的三角形?

两个三角形(即一个正方形)是常用的方法,因为正方形更容易纹理化。

我可以将纹理仅用于 Alpha,但使用动态颜色吗?(例如有纹理=类,颜色=其他分数)?

是的。如果您使用固定管道,纹理将由当前颜色调制。换句话说,如果您的纹理中有一个带有 alpha 的白色标记,并且您将当前颜色设置为红色,您将得到一个红色标记。如果您使用着色器,则必须在片段着色器中执行此操作。

在 OpenGL 中是否有任何我在常规绘图库(例如 gnuplot)中没有的样式标记的更酷方法?

就像我提到的:动画。你可以让你的标记旋转,上下摆动,或者以不同的速度随机摆动。我曾经听说过一种计算机网络可视化系统,其中水会从计算机图标中滴出以指示数据包丢失,并且会冒烟和火来指示 CPU 过热。极限是你的想象力!

任何性能提示?显示列表或顶点缓冲区?

顶点缓冲区。可能是着色器。但是根据您的数据集的大小和您使用 OpenGL 的经验,您可以在没有任何一个的情况下侥幸逃脱。

先尝试最简单的事情,如果太慢,就用更快的实现来代替瓶颈。不要试图一次做所有事情;让一件事发挥作用,然后逐步添加和改进一个步骤。

于 2012-10-20T10:07:11.713 回答
1

OpenGL 在它为您提供的图形基元方面是非常基础的。任何比点、线或三角形更复杂的东西,无论是否有纹理,都必须由用户实现。

我认为最好的做法是在标记位置绘制小四边形。使用实例化绘图和着色器可以非常有效地完成此操作。寻找现代粒子系统渲染技术来获得这个想法。标记的形状可以由纹理定义,或者,这就是我要做的,在片段着色器中通过求解一些描述标记形状的方程来程序化,并且discard- 将所有片段不属于形状的一部分.

于 2012-10-20T10:04:38.290 回答