一、目的
1、正弦波叠加为方波的GLSL实现;
二、程序运行结果
三、正弦波合成方波的处理
1、傅里叶函数分解方波公式:
f(y) = 4/PI * (sinx+ sin3x/3 + sin5x/5 + …);
2、实际程序里面公式为:
f(y) = sinx+ sin3x/3 + sin5x/5 + …
3、键盘控制
加入了正弦波合成方波的处理,使用箭头键移动正弦波,使用上下箭头进行振幅调整,使用+,-号来调整正弦波叠加的次数。
四、源代码
"""
glfw_sin02.py
Author: dalong10
Description: Draw a SquareWave, learning OPENGL
"""
import glutils #Common OpenGL utilities,see glutils.py
import sys, random, math
import OpenGL
from OpenGL.GL import *
from OpenGL.GL.shaders import *
import numpy
import numpy as np
import glfw
strVS = """
#version 330 core
layout (location = 0) in float vertexSerial;
uniform int g_sinCnt;
uniform float g_rangeL;
uniform float g_rangeR;
uniform float g_amplitud;
const int sampleCnt=200;
vec2 createSinPostion(float posIdex,float factor,float amplitude, float rangeL, float rangeR)
{vec2 sinPos;
float range = rangeR - rangeL;
sinPos.x = (2.0 * posIdex - s