säätöä
This commit is contained in:
76
src/main.cpp
76
src/main.cpp
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user