finished chapter "Move around"
This commit is contained in:
parent
6a51a7a0ae
commit
0ea858953b
|
@ -12,7 +12,7 @@
|
||||||
#include "util/stb_image.h"
|
#include "util/stb_image.h"
|
||||||
|
|
||||||
// Continue: https://learnopengl.com/Getting-started/Camera
|
// Continue: https://learnopengl.com/Getting-started/Camera
|
||||||
// Chapter: Walk around
|
// Chapter: Look around
|
||||||
//
|
//
|
||||||
// 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
|
// For the "real" Nebulix Engine setup everything so it can be compiled/used with VSCode/CLion and not just VS
|
||||||
|
@ -32,6 +32,12 @@
|
||||||
typedef glm::mat4 mat4;
|
typedef glm::mat4 mat4;
|
||||||
typedef glm::vec3 vec3;
|
typedef glm::vec3 vec3;
|
||||||
|
|
||||||
|
vec3 cameraPosition = vec3(0.0f, 0.0f, 3.0f);
|
||||||
|
vec3 cameraFront = vec3(0.0f, 0.0f, -1.0f);
|
||||||
|
vec3 cameraUp = vec3(0.0f, 1.0f, 0.0f);
|
||||||
|
|
||||||
|
float deltaTime = 0.0f;
|
||||||
|
float lastFrameTime = 0.0f;
|
||||||
|
|
||||||
void OnWindowResize(GLFWwindow* window, int width, int height)
|
void OnWindowResize(GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
|
@ -40,8 +46,24 @@ void OnWindowResize(GLFWwindow* window, int width, int height)
|
||||||
|
|
||||||
void ProcessInput(GLFWwindow* window)
|
void ProcessInput(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
|
const float cameraSpeed = 3.0f * deltaTime;
|
||||||
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
|
||||||
|
cameraPosition += cameraSpeed * cameraFront;
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
||||||
|
cameraPosition -= cameraSpeed * cameraFront;
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
|
||||||
|
cameraPosition -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
|
||||||
|
cameraPosition += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
|
||||||
|
|
||||||
|
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS)
|
||||||
|
cameraFront -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed * 0.25f;
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS)
|
||||||
|
cameraFront += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed * 0.25f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Configure()
|
void Configure()
|
||||||
|
@ -141,7 +163,7 @@ int main()
|
||||||
vec3(-1.3f, 1.0f, -1.5f)
|
vec3(-1.3f, 1.0f, -1.5f)
|
||||||
};
|
};
|
||||||
|
|
||||||
// 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, since it reuses vertices;
|
||||||
// VAO == collection of VBOs/EBOs used for rendering
|
// VAO == collection of VBOs/EBOs used for rendering
|
||||||
GLuint vertexBufferObject, elementBufferObject, vertexArrayObject;
|
GLuint vertexBufferObject, elementBufferObject, vertexArrayObject;
|
||||||
glGenVertexArrays(1, &vertexArrayObject);
|
glGenVertexArrays(1, &vertexArrayObject);
|
||||||
|
@ -183,33 +205,21 @@ int main()
|
||||||
Texture2D containerImage("images/container.jpg");
|
Texture2D containerImage("images/container.jpg");
|
||||||
Texture2D faceImage("images/awesomeface.png", 0, GL_RGBA);
|
Texture2D faceImage("images/awesomeface.png", 0, GL_RGBA);
|
||||||
|
|
||||||
|
|
||||||
vec3 cameraPosition = vec3(0.0f, 0, 3.0f);
|
|
||||||
|
|
||||||
vec3 cameraTarget = vec3(0.0f, 0.0f, 0.0f);
|
|
||||||
vec3 cameraDirection = glm::normalize(cameraPosition - cameraTarget);
|
|
||||||
|
|
||||||
vec3 worldUp = vec3(0.0f, 1.0f, 0.0f);
|
|
||||||
vec3 cameraRight = glm::normalize(glm::cross(worldUp, cameraDirection)); // vector pointing to the right of the camera
|
|
||||||
|
|
||||||
vec3 cameraUp = glm::cross(cameraDirection, cameraRight);
|
|
||||||
|
|
||||||
//mat4 viewMatrix = glm::lookAt(cameraPosition, cameraTarget, worldUp);
|
|
||||||
mat4 projectionMatrix = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
|
mat4 projectionMatrix = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
|
||||||
|
|
||||||
float timeLastFrame = glfwGetTime();
|
|
||||||
// main loop
|
// main loop
|
||||||
while(!glfwWindowShouldClose(window))
|
while(!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
|
float currentFrameTime = glfwGetTime();
|
||||||
|
deltaTime = currentFrameTime - lastFrameTime;
|
||||||
|
lastFrameTime = currentFrameTime;
|
||||||
|
|
||||||
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
ProcessInput(window);
|
ProcessInput(window);
|
||||||
|
|
||||||
const float radius = 10.0f;
|
mat4 viewMatrix = glm::lookAt(cameraPosition, cameraPosition + cameraFront, cameraUp);
|
||||||
float camX = sin(glfwGetTime()) * radius;
|
|
||||||
float camZ = cos(glfwGetTime()) * radius;
|
|
||||||
mat4 viewMatrix = glm::lookAt(vec3(camX, 0, camZ), cameraTarget, worldUp);
|
|
||||||
|
|
||||||
shader->Use();
|
shader->Use();
|
||||||
shader->SetInt("ourTexture1", 0);
|
shader->SetInt("ourTexture1", 0);
|
||||||
|
@ -222,14 +232,13 @@ int main()
|
||||||
|
|
||||||
glBindVertexArray(vertexArrayObject);
|
glBindVertexArray(vertexArrayObject);
|
||||||
|
|
||||||
float time = glfwGetTime();
|
|
||||||
for (int i = 0; i < 10; i++) // somehow cubePositions->length() does not return the correct number?
|
for (int i = 0; i < 10; i++) // somehow cubePositions->length() does not return the correct number?
|
||||||
{
|
{
|
||||||
mat4 model = mat4(1.0f);
|
mat4 model = mat4(1.0f);
|
||||||
model = glm::translate(model, cubePositions[i]);
|
model = glm::translate(model, cubePositions[i]);
|
||||||
float angle = (20.0f * i);
|
float angle = (20.0f * i);
|
||||||
if (i % 3 == 0)
|
if (i % 3 == 0)
|
||||||
angle = time * 25;
|
angle = currentFrameTime * 25;
|
||||||
model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));
|
model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));
|
||||||
shader->SetMatrix("modelMatrix", model);
|
shader->SetMatrix("modelMatrix", model);
|
||||||
|
|
||||||
|
@ -239,7 +248,6 @@ int main()
|
||||||
|
|
||||||
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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user