用openGL绘制频谱图的最佳方法是啥

Posted

技术标签:

【中文标题】用openGL绘制频谱图的最佳方法是啥【英文标题】:What is the best way to plot a spectrogram with openGL用openGL绘制频谱图的最佳方法是什么 【发布时间】:2021-05-22 11:51:50 【问题描述】:

我编写了一个代码来计算正弦和余弦信号的频谱图,应用 Hann 窗口,计算 FFT,计算频率系数的对数幅度。

我通过在 openGL 中编写一个简单的函数来绘制幅度频谱来测试它是否可以正常工作,我得到了以下结果:

如您所见,有 2 个条形表示正弦 * cos 波。

我拥有绘制spectrogram 所需的所有信息(频率、幅度、时间) 现在我的问题是我怎么画?我的第一个想法是画点,所以我将使用时间数组作为间隔时间,我需要在 X 轴上绘制点,频率数组到在 Y 轴上绘制它们的位置,幅度将是颜色点。

也许这是一个低效的想法,因为我看到在 openGL 中绘制点确实效率低下,所以我不知道有什么更好的想法,我在网上找不到任何“简单”的 openGL 频谱图示例。

【问题讨论】:

制作一个颜色数组,填充一次,然后将其作为纹理提供给 GL。 二维数组? @HolyBlackCat 是的,一个二维数组。 哦,所以我没有像我说的那样单独绘制每个点,而是将它放在该数组中并将其作为纹理提供给 GL? 为什么不尝试使用帧缓冲区让给定的方程绘制为 y=f(x) 现在只需检查它是否满足。如果确实如此,则输出一个彩色像素,否则将片段着色为黑色。然后应用一个扩展着色器来获得更粗的线条。!? 【参考方案1】:

@HolyBlackCat 评论就是答案

“制作一个颜色数组,填充一次,然后将其作为纹理提供给 GL”

【讨论】:

以上是关于用openGL绘制频谱图的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

调试 OpenGL 的最佳方法是啥?

绘制分层 OpenGL ES 内容的最佳方式是啥?

在 OpenGL 中绘制形状的标准(常用)方法是啥?

在OpenGL中采样16位高度图的正确方法是啥

在 OpenGL 中处理 FBO 的最佳方法是啥?

在 OpenGL 中绘制 3d 图形的最有效方法是啥?