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

Add and follow Voyager

parent 614a3c17
Loading
Loading
Loading
Loading
+33 −3
Original line number Diff line number Diff line
@@ -30,6 +30,20 @@ Application::Application(size_t initialWidth, size_t initialHeight) {
	pioneerModelMatrix = glm::scale(pioneerModelMatrix, glm::vec3(0.2f));
	pioneerModelMatrix = glm::rotate(pioneerModelMatrix, -3.14159f / 8.0f, glm::vec3(1.0, 0.0, 0.0));

	voyagerModelMatrix = glm::mat4(1.0f);
	voyagerModelMatrix = glm::translate(voyagerModelMatrix, glm::vec3(20.0f, 2.0f, 0.0f));
	voyagerModelMatrix = glm::scale(voyagerModelMatrix, glm::vec3(0.1f));
	voyagerModelMatrix = glm::rotate(voyagerModelMatrix, 3.14159f / 2.0f, glm::vec3(1.0, 0.0, 0.0));
	voyagerModelMatrix = glm::rotate(voyagerModelMatrix, 3.14159f / 2.0f, glm::vec3(0.0, 0.0, 1.0));

	ulyssesModelMatrix = glm::mat4(1.0f);

	galileoModelMatrix = glm::mat4(1.0f);

	cassiniModelMatrix = glm::mat4(1.0f);

	junoModelMatrix = glm::mat4(1.0f);

	glCreateBuffers(1, &cameraBuffer);
	glNamedBufferStorage(cameraBuffer, sizeof(CameraUBO), &cameraUbo, GL_DYNAMIC_STORAGE_BIT);

@@ -69,14 +83,19 @@ void Application::render() {
	// Update data
	// --------------------------------------------------------------------------


	time = glfwGetTime();
	if (lastTime > 0.0) {
		rotateProbeMatrix(pioneerModelMatrix, 0.2f);
		rotateProbeMatrix(voyagerModelMatrix, -0.1f);
	}

	// Camera
	glm::vec3 cameraPosition = glm::vec3(pioneerModelMatrix * glm::vec4(camera.get_eye_position(), 1.0f));
	glm::vec3 cameraPosition;
	if (followedProbe) {
		cameraPosition = glm::vec3(*followedProbe * glm::vec4(camera.get_eye_position(), 1.0f));
	} else {
		cameraPosition = camera.get_eye_position();
	}
	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);
@@ -129,7 +148,7 @@ void Application::render() {
	glDrawElementsInstanced(teapot.mode(), teapot.indicesCount(), GL_UNSIGNED_INT, nullptr, 2048);

	drawProbe(pioneer, pioneerModelMatrix);
	//drawScene(voyager, voyagerModelMatrix);
	drawProbe(voyager, voyagerModelMatrix);
	//drawScene(ulysses, ulyssesModelMatrix);
	//drawScene(galileo, galileoModelMatrix);
	//drawScene(cassini, cassiniModelMatrix);
@@ -184,4 +203,15 @@ void Application::onMousePressed(GLFWwindow *window, int button, int action, int
	camera.on_mouse_button(button, action, mods);
}
void Application::onKeyPressed(GLFWwindow *window, int key, int scancode, int action, int mods) {
	switch (key) {
	case GLFW_KEY_0:
		followedProbe = nullptr;
		break;
	case GLFW_KEY_1:
		followedProbe = &pioneerModelMatrix;
		break;
	case GLFW_KEY_2:
		followedProbe = &voyagerModelMatrix;
		break;
	}
}
 No newline at end of file
+7 −6
Original line number Diff line number Diff line
@@ -65,16 +65,16 @@ private:

	Scene pioneer = Scene("objects/pioneer/pioneer.obj");
	glm::mat4 pioneerModelMatrix;
	//Scene voyager = Scene("objects/voyager/voyager.obj");
	//glm::mat4 voyagerModelMatrix;
	Scene voyager = Scene("objects/voyager/voyager.obj");
	glm::mat4 voyagerModelMatrix;
	//Scene ulysses = Scene("objects/ulysses/ulysses.obj");
	//glm::mat4 ulyssesModelMatrix;
	glm::mat4 ulyssesModelMatrix;
	//Scene galileo = Scene("objects/galileo/galileo.obj");
	//glm::mat4 galileoModelMatrix;
	glm::mat4 galileoModelMatrix;
	//Scene cassini = Scene("objects/cassini/cassini.obj");
	//glm::mat4 cassiniModelMatrix;
	glm::mat4 cassiniModelMatrix;
	//Scene juno = Scene("objects/juno/Juno.obj");
	//glm::mat4 junoModelMatrix;
	glm::mat4 junoModelMatrix;

	Material jupiterMaterial;
	glm::mat4 jupiterModelMatrix;
@@ -103,6 +103,7 @@ private:
	double lastTime = 0.0f;
	double music[Playback::magicCount] = { 0 };
	const double musicStepDown = -0.03;
	glm::mat4 *followedProbe = nullptr;

	void rotateProbeMatrix(glm::mat4 &modelMatrix, float velocity);
	void drawProbe(Scene &scene, const glm::mat4 &modelMatrix);