Commit 614a3c17 authored by Adam Štěpánek's avatar Adam Štěpánek
Browse files

Let camera follow Pioneer

parent f2df3f0a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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,
+16 −7
Original line number Diff line number Diff line
@@ -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() {
@@ -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
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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;