【C++】基于OpenGL的音乐可视化(五): 频谱渲染

为了使频谱图的绘制更为规范,博主将绘制逻辑进行了小幅的修改,加入着色器进行渲染,加入VAO,VBO用来实现绘制图形时数据的管理。

顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;

void main()
{
    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}

片段着色器:

#version 330 core
out vec4 FragColor;

uniform vec4 ourColor; // 在OpenGL程序代码中设定这个变量

void main()
{
    FragColor = ourColor;
}

绘制频谱时的色彩渲染,设置两个颜色变量redValue,yellowValue实现颜色的变化,每次绘制一个频谱线之后对redValue,yellowValue进行相应的修改,要注意的是,为了使颜色更为自然,每一帧的画面绘制时,在绘制了一半的频谱时,redValue,yellowValue做相反的变化,恢复原来的颜色,代码如下:

//绘制频谱
void drawLine()
{
    usleep(44100);   //通过延时实现频谱的显示频率
    //颜色随机设置
    float redValue = 0.0f;
    float yellowValue = 1.0f;
    
    for (int i=istart; i<1000+istart; i=i+2) {
        
        glUniform4f(0, redValue, 1.0f, yellowValue, 1.0f);
        
        if (i<=1000+istart) {
            redValue=redValue+0.002;
            yellowValue=yellowValue-0.002;
        }else{
            redValue=redValue-0.002;
            yellowValue=yellowValue+0.002;
        }
        
        glDrawArrays(GL_LINES, i, 2);
    }
    istart+=1000;
}

代码运行效果图【是不是比上一篇博文里的频谱图漂亮多了呢】:

猜你喜欢

转载自blog.csdn.net/qq_38130710/article/details/81209105