使用OpenGL散点图:如何设置标记样式

时间:2012-10-20 09:57:20

标签: opengl graphics 3d scatter-plot

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

样式标记有哪些选项,例如不同的群体可见吗?

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

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

在OpenGL中是否有任何额外的方式来标记我在常规绘图库(例如,gnuplot)中没有的标记?

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

2 个答案:

答案 0 :(得分:3)

这是很多问题。让我一个一个地解决它们。

  

我对样式标记有哪些选项,例如不同的群体可见吗?

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

  

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

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

  

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

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

  

我可以仅为alpha使用纹理,但使用动态颜色吗? (例如,纹理=类,颜色=其他得分)?

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

  

在OpenGL中是否有任何额外的方式来标记我在常规绘图库(例如,gnuplot)中没有的标记?

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

  

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

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

首先尝试最简单的事情,如果速度太慢,请用更快的实现来替换瓶颈。不要试图一次做所有事情;得到一件事,然后逐步增加和改进一步。

答案 1 :(得分:1)

OpenGL在它为图形基元提供的内容中非常基础。用户必须实现比点,线或三角形更复杂,纹理与否的一切。

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