säätöä

This commit is contained in:
2025-07-28 16:39:34 +03:00
parent c11d86922c
commit 35c08c5e80
3 changed files with 154 additions and 244 deletions

View File

@ -16,6 +16,11 @@
#define USE_AUDIO 1
#define NO_UNIFORMS 0
#define SHAPES 16
#define SHAPES_TEX_SIZE (SHAPES * SHAPES * 4)
#define SHAPES_TOTAL (SHAPES * SHAPES)
#define MAX_DISTANCE 100.f
#include "definitions.h"
#if OPENGL_DEBUG
#include "debug.h"
@ -126,28 +131,14 @@ int __cdecl main(int argc, char* argv[])
static float fft_input[FFT_SIZE];
static float fft_output[FFT_SIZE / 2]; // Magnitudes
static float fft_uniform[FFT_SIZE / 4];
static float shapesData[SHAPES_TEX_SIZE];
// main note effect
boolean beenPlaying = false;
const int SHAPES_SIZE = 15;
float shapeIncrement = 0.15f;
/**
* Definition of shape with 3 parameters in a vec3
*
* h position, v position, length
*
*/
float vec3ShapeArray[5][3] = {
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }
};
float test[3] = { 0.0f, 0.0f, 0.0f }; // test float of one shape
int currentShape = 0; // mark location which shape we are currently building
boolean isPlaying = false;
@ -155,43 +146,17 @@ int __cdecl main(int argc, char* argv[])
float lastPlayPos = 0;
float lastNote = 0.0f;
/*GLfloat shapes[5][3] = {
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }
};*/
struct Vec3 {
float x, y, z;
};
#define GRID 32
#define HEX_TEX_SIZE (GRID * GRID * 4) // RGBA: 4 floats per texel
#define SHAPES 16
#define SHAPES_TEX_SIZE (SHAPES * SHAPES * 4)
#define SHAPES_TOTAL (SHAPES * SHAPES)
#define MAX_DISTANCE 100.f
PFNGLUNIFORM1FVPROC glUniform1fvProc = ((PFNGLUNIFORM1FVPROC)wglGetProcAddress("glUniform1fv"));
PFNGLACTIVETEXTUREPROC glActiveTexture = ((PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture"));
PFNGLUNIFORM1IPROC glUniform1i = ((PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i"));
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = ((PFNGLGETUNIFORMLOCATIONPROC)wglGetProcAddress("glGetUniformLocation"));
GLuint hexGridTex, ShapesTex;
glGenTextures(1, &hexGridTex);
glBindTexture(GL_TEXTURE_2D, hexGridTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, GRID, GRID, 0, GL_RGBA, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
GLuint ShapesTex;
glGenTextures(1, &ShapesTex);
glBindTexture(GL_TEXTURE_2D, ShapesTex);
@ -271,11 +236,11 @@ int __cdecl main(int argc, char* argv[])
{
float gain = 50.0f;
float alpha = 0.10f; // "Hidastaa" FFT:n piikkej<65>
float threshhold = 0.05f; // Alin arvo mik<69> p<><70>stet<65><74>n shaderille (v<>hent<6E><74> "noisea")
float x_t = fft_output[i] * gain;
float threshhold = 0.015f; // Alin arvo mik<69> p<><70>stet<65><74>n shaderille (v<>hent<6E><74> "noisea")
float x_t = (fft_output[i] < threshhold) ? 0.f : fft_output[i] * gain;
// Exponential smoothing kaava
// s(t) = alpha*x(t)+(1-alpha)*s(t-1)
fft_uniform[i] = (x_t < threshhold) ? 0.f : alpha * (x_t)+(1 - alpha) * fft_uniform[i];
fft_uniform[i] = alpha * (x_t)+(1 - alpha) * fft_uniform[i];
}
}
syncs[0] = (float)playCursor / (SU_SAMPLE_RATE * SU_CHANNEL_COUNT * SU_SAMPLE_SIZE); // Aika sekunteina.
@ -294,7 +259,6 @@ int __cdecl main(int argc, char* argv[])
// if sound is playing, start a shape, if shape is already started - add length
// if sound has stopped, end shape
// if shape is finished, move shape forward
static float shapesData[SHAPES_TEX_SIZE];
float captureSync = syncs[5];
bool shapeJustFinished = false;
@ -304,7 +268,6 @@ int __cdecl main(int argc, char* argv[])
bool noteChanged = (captureSync != lastNote) ? TRUE : FALSE;
lastNote = captureSync;
// If note changed and value is significant, start new shape
if (noteChanged) {
int index = currentShape * 4;
@ -349,23 +312,6 @@ int __cdecl main(int argc, char* argv[])
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, ShapesTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SHAPES, SHAPES, GL_RGBA, GL_FLOAT, shapesData);
/*
float flatShapes[15] = {
vec3ShapeArray[0][0], vec3ShapeArray[0][1], vec3ShapeArray[0][2],
vec3ShapeArray[1][0], vec3ShapeArray[1][1], vec3ShapeArray[1][2],
vec3ShapeArray[2][0], vec3ShapeArray[2][1], vec3ShapeArray[2][2],
vec3ShapeArray[3][0], vec3ShapeArray[3][1], vec3ShapeArray[3][2],
vec3ShapeArray[4][0], vec3ShapeArray[4][1], vec3ShapeArray[4][2]
};
*/
//PFNGLUNIFORM3FVPROC glUniform3fvProc = ((PFNGLUNIFORM3FVPROC)wglGetProcAddress("glUniform3fv"));
//glUniform3fvProc(600, 1, flatShapes); // array of shapes
//glUniform3fvProc(700, 1, test); // test shape
glUniform1fvProc(0, SU_NUMSYNCS + 1, syncs);