我正试图找到一种巧妙的方法来渲染大型光谱图(例如全屏)。谱图是坐标系,其中x轴是时间,y轴是频率,颜色强度是频率分量的大小,它看起来like this (youtube).
值得注意的是,每个帧,一个新列(1个像素宽)是新的,但是整个光谱的其余部分是相同的,只向左移动了一个像素。目前我只是写一个像图像一样的循环软件缓冲区,并绘制它 - 但它在高帧率和屏幕化时显然很慢。
对于这个问题有没有明显的解决方案,使用OpenGL(或某些软件技巧 - 必须是跨平台的)?也许通过在GPU内存上使用缓冲区,使用填充它的着色器(不可否认,除了绘制简单的东西之外,我对OpenGL的理解非常模糊)?它围绕着我看到的将GPU上的旧数据保存在一起。
答案 0 :(得分:4)
使用瀑布的单通道纹理(这是您正在绘制的图形,瀑布图),您可以使用glTexSubImage
一次更新一个列或行。通过使用GL_WRAP
模式,您可以简单地将纹理坐标推进超出纹理的边界,并且它将包裹。通过移动与更新相反的纹理,您可以获得瀑布效果(即移动频谱图,更新将在右边缘进行)。
要赋予整个颜色,请使用纹理的值作为使用片段着色器的传递函数LUT纹理的索引。
答案 1 :(得分:0)
您可以将GPU库用于频谱图计算:nnAudio