started with coordinate system section
This commit is contained in:
		| @ -11,7 +11,7 @@ | |||||||
| #include "util/stb_image.h" | #include "util/stb_image.h" | ||||||
|  |  | ||||||
| // Continue: https://learnopengl.com/Getting-started/Coordinate-Systems | // Continue: https://learnopengl.com/Getting-started/Coordinate-Systems | ||||||
| // Chapter: not started | // Chapter: More Cubes! | ||||||
| // | // | ||||||
| // TODO: look at project->properties->VC++ Directories-> change everything to the Environment var | // TODO: look at project->properties->VC++ Directories-> change everything to the Environment var | ||||||
| // For the "real" Nebulix Engine setup everything so it can be compiled/used with VSCode/CLion and not just VS (so basically having an "external" folder which has open gl, GLAD, etc. in it or something like this) | // For the "real" Nebulix Engine setup everything so it can be compiled/used with VSCode/CLion and not just VS (so basically having an "external" folder which has open gl, GLAD, etc. in it or something like this) | ||||||
| @ -27,6 +27,8 @@ | |||||||
|  |  | ||||||
| #define WINDOW_WIDTH 800 | #define WINDOW_WIDTH 800 | ||||||
| #define WINDOW_HEIGHT 600 | #define WINDOW_HEIGHT 600 | ||||||
|  | typedef glm::mat4 mat4; | ||||||
|  | typedef glm::vec3 vec3; | ||||||
|  |  | ||||||
|  |  | ||||||
| void OnWindowResize(GLFWwindow* window, int width, int height) | void OnWindowResize(GLFWwindow* window, int width, int height) | ||||||
| @ -68,16 +70,69 @@ int main() | |||||||
| 	OnWindowResize(window, WINDOW_WIDTH, WINDOW_HEIGHT); | 	OnWindowResize(window, WINDOW_WIDTH, WINDOW_HEIGHT); | ||||||
| 	glfwSetFramebufferSizeCallback(window, OnWindowResize); | 	glfwSetFramebufferSizeCallback(window, OnWindowResize); | ||||||
|  |  | ||||||
| 	GLfloat vertices[] = { // world coordinate, colour, uv coordinates | 	float vertices[] = { // object coordinates, uv-coordinates | ||||||
| 	  0.5f,  0.5f, 0.0f,   1.0f, 0.0f, 0.0f,   1.0f, 1.0f,  // top right | 	-0.5f, -0.5f, -0.5f,  0.0f, 0.0f, | ||||||
| 	  0.5f, -0.5f, 0.0f,   0.0f, 1.0f, 0.0f,   1.0f, 0.0f,  // bottom right | 	 0.5f, -0.5f, -0.5f,  1.0f, 0.0f, | ||||||
| 	 -0.5f, -0.5f, 0.0f,   0.0f, 0.0f, 1.0f,   0.0f, 0.0f,  // bottom left | 	 0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
| 	 -0.5f,  0.5f, 0.0f,   1.0f, 0.0f, 0.0f,   0.0f, 1.0f   // top left  | 	 0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  | 	-0.5f,  0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	-0.5f, -0.5f, -0.5f,  0.0f, 0.0f, | ||||||
|  |  | ||||||
|  | 	-0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 	 0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 1.0f, | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 1.0f, | ||||||
|  | 	-0.5f,  0.5f,  0.5f,  0.0f, 1.0f, | ||||||
|  | 	-0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |  | ||||||
|  | 	-0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	-0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  | 	-0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	-0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	-0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 	-0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |  | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	 0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  | 	 0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	 0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	 0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |  | ||||||
|  | 	-0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	 0.5f, -0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  | 	 0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	 0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	-0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 	-0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |  | ||||||
|  | 	-0.5f,  0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 	 0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	 0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 	-0.5f,  0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 	-0.5f,  0.5f, -0.5f,  0.0f, 1.0f | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	GLuint faces[]{ | 	GLuint faces[]{ | ||||||
| 		0, 1, 3, | 		0, 1, 3, | ||||||
| 		1, 2, 3 | 		1, 2, 3, | ||||||
| 	}; |  | ||||||
|  | 		4, 5, 6, | ||||||
|  | 		5, 6, 7, | ||||||
|  |  | ||||||
|  | 		8, 9, 10, | ||||||
|  | 		9, 10, 11, | ||||||
|  |  | ||||||
|  | 		12, 13, 14, | ||||||
|  | 		13, 14, 15, | ||||||
|  |  | ||||||
|  | 		16, 17, 18, | ||||||
|  | 		17, 18, 19, | ||||||
|  |  | ||||||
|  | 		20, 21, 22, | ||||||
|  | 		21, 22, 23 | ||||||
|  | 	}; // 23 | ||||||
|  |  | ||||||
| 	// VBO == all verticies; EBO == connection of vertices (faces) and is optional although it is a bit more efficient than using VBOs;  | 	// VBO == all verticies; EBO == connection of vertices (faces) and is optional although it is a bit more efficient than using VBOs;  | ||||||
| 	// VAO == collection of VBOs/EBOs used for rendering | 	// VAO == collection of VBOs/EBOs used for rendering | ||||||
| @ -95,13 +150,10 @@ int main() | |||||||
| 	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(faces), faces, GL_STATIC_DRAW); | 	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(faces), faces, GL_STATIC_DRAW); | ||||||
|  |  | ||||||
| 	// position attribute | 	// position attribute | ||||||
| 	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); | 	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0); | ||||||
| 	glEnableVertexAttribArray(0); | 	glEnableVertexAttribArray(0); | ||||||
| 	// colour (or more general, the second vertex Attribute) |  | ||||||
| 	glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); |  | ||||||
| 	glEnableVertexAttribArray(1); |  | ||||||
| 	// uv-coordinates (or more general the third vertex attribute) | 	// uv-coordinates (or more general the third vertex attribute) | ||||||
| 	glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); | 	glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); | ||||||
| 	glEnableVertexAttribArray(2); | 	glEnableVertexAttribArray(2); | ||||||
| 	// I could unbind the VAO, but this is usually not needed because when creating a new VAO we need to bind that to change it anyway, so there shouldn't be a problem | 	// I could unbind the VAO, but this is usually not needed because when creating a new VAO we need to bind that to change it anyway, so there shouldn't be a problem | ||||||
|  |  | ||||||
| @ -156,27 +208,32 @@ int main() | |||||||
| 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // use nearest neighbour when zooming out | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // use nearest neighbour when zooming out | ||||||
| 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // use bilinear when zooming in | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // use bilinear when zooming in | ||||||
|  |  | ||||||
|  | 	mat4 modelMatrix = mat4(1.0f); | ||||||
|  | 	modelMatrix = glm::rotate(modelMatrix, glm::radians(-55.0f), vec3(1.0f, 0, 0)); | ||||||
|  | 	mat4 viewMatrix = mat4(1.0f); | ||||||
|  | 	viewMatrix = glm::translate(viewMatrix, vec3(0, 0, -3.0f)); | ||||||
|  | 	mat4 projectionMatrix = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f); | ||||||
|  |  | ||||||
|  | 	glEnable(GL_DEPTH_TEST); | ||||||
|  | 	float timeLastFrame = glfwGetTime(); | ||||||
| 	// main loop | 	// main loop | ||||||
| 	while(!glfwWindowShouldClose(window)) | 	while(!glfwWindowShouldClose(window)) | ||||||
| 	{ | 	{ | ||||||
| 		glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | 		glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | ||||||
| 		glClear(GL_COLOR_BUFFER_BIT); | 		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||||||
|  |  | ||||||
| 		ProcessInput(window); | 		ProcessInput(window); | ||||||
|  | 		 | ||||||
|  | 		float time = glfwGetTime(); | ||||||
|  |  | ||||||
| 		glm::mat4 transform = glm::mat4(1.0f); | 		modelMatrix = glm::rotate(modelMatrix, time * (time - timeLastFrame) + 0.001f * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f)); | ||||||
| 		transform = glm::rotate(transform, (float)glfwGetTime(), glm::vec3(0, 0, 1.0f)); |  | ||||||
| 		transform = glm::translate(transform, glm::vec3(glm::sin((float)glfwGetTime()), 0, 0)); |  | ||||||
| 		//transform = glm::scale(transform, glm::vec3(glm::sin((float)glfwGetTime()))); |  | ||||||
|  |  | ||||||
| 		shader->Use(); | 		shader->Use(); | ||||||
| 		shader->SetInt("ourTexture1", 0); | 		shader->SetInt("ourTexture1", 0); | ||||||
| 		shader->SetInt("ourTexture2", 1); | 		shader->SetInt("ourTexture2", 1); | ||||||
| 		shader->SetMatrix("transform", transform); | 		shader->SetMatrix("modelMatrix", modelMatrix); | ||||||
| 		//float time = glfwGetTime(); | 		shader->SetMatrix("viewMatrix", viewMatrix); | ||||||
| 		//float greenValue = (sin(time) / 2.0f) + 0.5f; | 		shader->SetMatrix("projectionMatrix", projectionMatrix); | ||||||
| 		//shader->setFloat("ourColour", 0.0f, greenValue, 0.0f, 0.0f); |  | ||||||
|  |  | ||||||
| 		glActiveTexture(GL_TEXTURE0); // before binding texture, activate correct textre Unit (some drivers might show nothing if this is omitted) | 		glActiveTexture(GL_TEXTURE0); // before binding texture, activate correct textre Unit (some drivers might show nothing if this is omitted) | ||||||
| 		glBindTexture(GL_TEXTURE_2D, textureID_container); | 		glBindTexture(GL_TEXTURE_2D, textureID_container); | ||||||
| @ -184,10 +241,12 @@ int main() | |||||||
| 		glBindTexture(GL_TEXTURE_2D, textureID_face); | 		glBindTexture(GL_TEXTURE_2D, textureID_face); | ||||||
| 		 | 		 | ||||||
| 		glBindVertexArray(vertexArrayObject); | 		glBindVertexArray(vertexArrayObject); | ||||||
| 		glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); | 		//glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs | ||||||
|  | 		glDrawArrays(GL_TRIANGLES, 0, 36); // for VAOs | ||||||
|  |  | ||||||
| 		glfwSwapBuffers(window); | 		glfwSwapBuffers(window); | ||||||
| 		glfwPollEvents(); | 		glfwPollEvents(); | ||||||
|  | 		timeLastFrame = glfwGetTime(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// optional, as we are at the end of the program. | 	// optional, as we are at the end of the program. | ||||||
|  | |||||||
| @ -1,16 +1,22 @@ | |||||||
| #version 330 core | #version 330 core | ||||||
| layout (location = 0) in vec3 aPos; | layout (location = 0) in vec3 aPos; | ||||||
| layout (location = 1) in vec3 aColour; | //layout (location = 1) in vec3 aColour; | ||||||
| layout (location = 2) in vec2 aTexCoord; | layout (location = 2) in vec2 aTexCoord; | ||||||
|  |  | ||||||
| out vec3 ourColour; | out vec3 ourColour; | ||||||
| out vec2 texCoord; | out vec2 texCoord; | ||||||
|  |  | ||||||
| uniform mat4 transform; | uniform mat4 modelMatrix; | ||||||
|  | uniform mat4 viewMatrix; | ||||||
|  | uniform mat4 projectionMatrix; | ||||||
|  |  | ||||||
|  | //uniform mat4 transform; | ||||||
|  |  | ||||||
| void main() | void main() | ||||||
| { | { | ||||||
| 	gl_Position = transform * vec4(aPos, 1.0); | 	// note that we read the multiplication from right to left | ||||||
| 	ourColour = aColour; |     gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(aPos, 1.0); | ||||||
|  | 	//gl_Position = transform * vec4(aPos, 1.0); | ||||||
|  | 	ourColour = vec3(1.0); | ||||||
| 	texCoord = aTexCoord; | 	texCoord = aTexCoord; | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user