started with coordinate system section
This commit is contained in:
parent
de5a6d1bfd
commit
350aef4871
|
@ -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);
|
||||||
|
|
||||||
glm::mat4 transform = glm::mat4(1.0f);
|
float time = glfwGetTime();
|
||||||
transform = glm::rotate(transform, (float)glfwGetTime(), glm::vec3(0, 0, 1.0f));
|
|
||||||
transform = glm::translate(transform, glm::vec3(glm::sin((float)glfwGetTime()), 0, 0));
|
modelMatrix = glm::rotate(modelMatrix, time * (time - timeLastFrame) + 0.001f * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));
|
||||||
//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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user