我想实现一个允许用户缩放和平滑平移的时间序列查看器。
我以前做过一些即时模式opengl,但现在不赞成使用VBO。我能找到的所有 VBO 示例都存储了每个点的 XYZ 坐标。
我怀疑我需要将所有数据保存在 VRAM 中,以便在平移期间获得可以称为“平滑”的帧速率,但我只有 Y 数据(因变量)。X 是一个自变量,可以从指数中计算出来,Z 是常数。如果我必须存储 X 和 Z,那么我的内存需求(缓冲区大小和 CPU->GPU 块传输)将增加三倍。而且我有数以千万计的数据点,用户可以通过这些数据点进行平移,因此内存使用量将不小。
是否有一些技术可以绘制一维顶点数组,其中索引用作另一个坐标,或者存储一维数组(可能在纹理中?)并使用着色器程序生成 XYZ?我的印象是在新的无固定特征管道模型下无论如何我都需要一个简单的着色器来实现缩放和平移,所以如果我可以结合 X 和 Z 坐标的生成以及 Y 的缩放/平移,那将是理想的。
这甚至可能吗?您知道执行此操作的任何示例代码吗?或者你至少能给我一些伪代码,说明以什么顺序调用哪些 GL 函数?
谢谢!
编辑:为了确保这一点很清楚,这是等效的立即模式代码和顶点数组代码:
// immediate
glBegin(GL_LINE_STRIP);
for( int i = 0; i < N; ++i )
glVertex2(i, y[i]);
glEnd();
// vertex array
struct { float x, y; } v[N];
for( int i = 0; i < N; ++i ) {
v[i].x = i;
v[i].y = y[i];
}
glVertexPointer(2, GL_FLOAT, 0, v);
glDrawArrays(GL_LINE_STRIP, 0, N);
请注意,v[]
它的大小是 的两倍y[]
。