Loading shaders/belt.vert +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ void main() 0.0f, 0.0f, 0.0f, 1.0f); float dist = snoise(vec2(gl_InstanceID, 0.0f)); float music = sqrt(float(magic[int(dist * 32.0f + 16.0f) ])); float music = float(magic[int(dist * 32.0f + 16.0f) ]); vec2 direction = vec2(cos(gl_InstanceID), sin(gl_InstanceID)) * (15.0f + dist * 5.0f); mat4 modelTranslation = mat4( 1.0f, 0.0f, 0.0f, 0.0f, Loading src/application.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ Application::Application(size_t initialWidth, size_t initialHeight) { glNamedBufferStorage(lightsBuffer, lights.size() * sizeof(LightUBO), lights.data(), GL_DYNAMIC_STORAGE_BIT); glCreateBuffers(1, &beltBuffer); glNamedBufferStorage(beltBuffer, sizeof(double[Playback::magicCount]), playback.magic.data(), GL_DYNAMIC_STORAGE_BIT); glNamedBufferStorage(beltBuffer, sizeof(music), &music, GL_DYNAMIC_STORAGE_BIT); } Application::~Application() { Loading Loading @@ -69,18 +69,27 @@ void Application::render() { // Update data // -------------------------------------------------------------------------- time = glfwGetTime(); if (lastTime > 0.0) { rotateProbeMatrix(pioneerModelMatrix, 0.1f); rotateProbeMatrix(pioneerModelMatrix, 0.2f); } // Camera cameraUbo.position = glm::vec4(camera.get_eye_position(), 1.0f); cameraUbo.view = glm::lookAt(camera.get_eye_position(), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); glm::vec3 cameraPosition = glm::vec3(pioneerModelMatrix * glm::vec4(camera.get_eye_position(), 1.0f)); cameraUbo.position = glm::vec4(cameraPosition, 1.0f); cameraUbo.view = glm::lookAt(cameraPosition, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); glNamedBufferSubData(cameraBuffer, 0, sizeof(CameraUBO), &cameraUbo); // Belt glNamedBufferSubData(beltBuffer, 0, sizeof(double[Playback::magicCount]), playback.magic.data()); for (size_t i = 0; i < Playback::magicCount; i++) { if (playback.magic[i] > music[i]) { music[i] = playback.magic[i]; } else if (playback.magic[i] < music[i]) { music[i] += Application::musicStepDown; } } glNamedBufferSubData(beltBuffer, 0, sizeof(music), &music); // -------------------------------------------------------------------------- // Draw the scene Loading Loading @@ -117,7 +126,7 @@ void Application::render() { glProgramUniform1d(beltProgram.id(), 1, time); glBindTextureUnit(0, ringsTexture.id()); glBindVertexArray(teapot.vao()); glDrawElementsInstanced(teapot.mode(), teapot.indicesCount(), GL_UNSIGNED_INT, nullptr, 4096); glDrawElementsInstanced(teapot.mode(), teapot.indicesCount(), GL_UNSIGNED_INT, nullptr, 2048); drawProbe(pioneer, pioneerModelMatrix); //drawScene(voyager, voyagerModelMatrix); Loading src/application.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,9 @@ private: double time = 0.0f; double lastTime = 0.0f; double music[Playback::magicCount] = { 0 }; const double musicStepDown = -0.03; void rotateProbeMatrix(glm::mat4 &modelMatrix, float velocity); void drawProbe(Scene &scene, const glm::mat4 &modelMatrix); }; No newline at end of file src/playback.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ static void dataCallback(ma_device* pDevice, void* pOutput, const void* pInput, } fft(input, nullptr, Playback::magicCount * 2, realOutput, imaginaryOutput); for (size_t i = 0; i < Playback::magicCount; i++) { playback->magic[i] = sqrt(realOutput[i] * realOutput[i] + imaginaryOutput[i] * imaginaryOutput[i]); playback->magic[i] = sqrt(sqrt(realOutput[i] * realOutput[i] + imaginaryOutput[i] * imaginaryOutput[i])); } } (void)pInput; Loading Loading
shaders/belt.vert +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ void main() 0.0f, 0.0f, 0.0f, 1.0f); float dist = snoise(vec2(gl_InstanceID, 0.0f)); float music = sqrt(float(magic[int(dist * 32.0f + 16.0f) ])); float music = float(magic[int(dist * 32.0f + 16.0f) ]); vec2 direction = vec2(cos(gl_InstanceID), sin(gl_InstanceID)) * (15.0f + dist * 5.0f); mat4 modelTranslation = mat4( 1.0f, 0.0f, 0.0f, 0.0f, Loading
src/application.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ Application::Application(size_t initialWidth, size_t initialHeight) { glNamedBufferStorage(lightsBuffer, lights.size() * sizeof(LightUBO), lights.data(), GL_DYNAMIC_STORAGE_BIT); glCreateBuffers(1, &beltBuffer); glNamedBufferStorage(beltBuffer, sizeof(double[Playback::magicCount]), playback.magic.data(), GL_DYNAMIC_STORAGE_BIT); glNamedBufferStorage(beltBuffer, sizeof(music), &music, GL_DYNAMIC_STORAGE_BIT); } Application::~Application() { Loading Loading @@ -69,18 +69,27 @@ void Application::render() { // Update data // -------------------------------------------------------------------------- time = glfwGetTime(); if (lastTime > 0.0) { rotateProbeMatrix(pioneerModelMatrix, 0.1f); rotateProbeMatrix(pioneerModelMatrix, 0.2f); } // Camera cameraUbo.position = glm::vec4(camera.get_eye_position(), 1.0f); cameraUbo.view = glm::lookAt(camera.get_eye_position(), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); glm::vec3 cameraPosition = glm::vec3(pioneerModelMatrix * glm::vec4(camera.get_eye_position(), 1.0f)); cameraUbo.position = glm::vec4(cameraPosition, 1.0f); cameraUbo.view = glm::lookAt(cameraPosition, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); glNamedBufferSubData(cameraBuffer, 0, sizeof(CameraUBO), &cameraUbo); // Belt glNamedBufferSubData(beltBuffer, 0, sizeof(double[Playback::magicCount]), playback.magic.data()); for (size_t i = 0; i < Playback::magicCount; i++) { if (playback.magic[i] > music[i]) { music[i] = playback.magic[i]; } else if (playback.magic[i] < music[i]) { music[i] += Application::musicStepDown; } } glNamedBufferSubData(beltBuffer, 0, sizeof(music), &music); // -------------------------------------------------------------------------- // Draw the scene Loading Loading @@ -117,7 +126,7 @@ void Application::render() { glProgramUniform1d(beltProgram.id(), 1, time); glBindTextureUnit(0, ringsTexture.id()); glBindVertexArray(teapot.vao()); glDrawElementsInstanced(teapot.mode(), teapot.indicesCount(), GL_UNSIGNED_INT, nullptr, 4096); glDrawElementsInstanced(teapot.mode(), teapot.indicesCount(), GL_UNSIGNED_INT, nullptr, 2048); drawProbe(pioneer, pioneerModelMatrix); //drawScene(voyager, voyagerModelMatrix); Loading
src/application.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,9 @@ private: double time = 0.0f; double lastTime = 0.0f; double music[Playback::magicCount] = { 0 }; const double musicStepDown = -0.03; void rotateProbeMatrix(glm::mat4 &modelMatrix, float velocity); void drawProbe(Scene &scene, const glm::mat4 &modelMatrix); }; No newline at end of file
src/playback.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ static void dataCallback(ma_device* pDevice, void* pOutput, const void* pInput, } fft(input, nullptr, Playback::magicCount * 2, realOutput, imaginaryOutput); for (size_t i = 0; i < Playback::magicCount; i++) { playback->magic[i] = sqrt(realOutput[i] * realOutput[i] + imaginaryOutput[i] * imaginaryOutput[i]); playback->magic[i] = sqrt(sqrt(realOutput[i] * realOutput[i] + imaginaryOutput[i] * imaginaryOutput[i])); } } (void)pInput; Loading