added drawing of a cube using the custom game object class

This commit is contained in:
Daniel 2023-08-05 11:51:08 +02:00
parent 5c42364e43
commit ae99c30c6a
3 changed files with 31 additions and 18 deletions

View File

@ -11,7 +11,9 @@
#include "textures/Texture2D.h" #include "textures/Texture2D.h"
#include "util/stb_image.h" #include "util/stb_image.h"
#include "util/camera/camera.h" #include "util/camera/camera.h"
#include "object/game_object.h"
// TODO: Replace current rendering with he GameObject
// Continue: https://learnopengl.com/Lighting/Colors // Continue: https://learnopengl.com/Lighting/Colors
// Chapter: A lighting scene // Chapter: A lighting scene
// //
@ -167,6 +169,7 @@ int main()
-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, 0.0f, 1.0f -0.5f, 0.5f, -0.5f, 0.0f, 1.0f
}; };
std::vector<Nebulix::VertexAttribute> vertexAttribs = { Nebulix::VertexAttribute(), Nebulix::VertexAttribute(GL_FLOAT, GL_FALSE, 2) };
GLuint faces[]{ GLuint faces[]{
0, 1, 3, 0, 1, 3,
@ -203,9 +206,9 @@ int main()
// position attribute // position attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
// uv-coordinates (or more general the third vertex attribute which can be anything not just uv-coordinates) // uv-coordinates (or more general the second vertex attribute which can be anything not just uv-coordinates)
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(2); glEnableVertexAttribArray(1);
// 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
std::string vertexPath = "shaders/default/default.vert"; std::string vertexPath = "shaders/default/default.vert";
@ -227,7 +230,8 @@ 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);
std::vector<float> verts(std::begin(vertices), std::end(vertices));
Nebulix::GameObject cube = Nebulix::GameObject(verts, vertexAttribs);
// main loop // main loop
while(!glfwWindowShouldClose(window)) while(!glfwWindowShouldClose(window))
{ {
@ -254,7 +258,7 @@ int main()
glBindVertexArray(vertexArrayObject); glBindVertexArray(vertexArrayObject);
for (int i = 0; i < 10; i++) // somehow cubePositions->length() does not return the correct number? for (int i = 1; i < 10; i++)
{ {
mat4 model = mat4(1.0f); mat4 model = mat4(1.0f);
model = glm::translate(model, cubePositions[i]); model = glm::translate(model, cubePositions[i]);
@ -267,6 +271,8 @@ int main()
//glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs
glDrawArrays(GL_TRIANGLES, 0, 36); // for VAOs glDrawArrays(GL_TRIANGLES, 0, 36); // for VAOs
} }
shader->SetMatrix("modelMatrix", cube.GetModelMatrix());
cube.Draw();
glfwSwapBuffers(window); glfwSwapBuffers(window);
glfwPollEvents(); glfwPollEvents();

View File

@ -3,8 +3,6 @@
#include <exception> #include <exception>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include "../shaders/Shader.h"
namespace Nebulix namespace Nebulix
{ {
struct VertexAttribute struct VertexAttribute
@ -43,13 +41,13 @@ namespace Nebulix
public: public:
glm::vec3 Position; glm::vec3 Position;
GameObject(std::vector<float>& vertices, std::vector<VertexAttribute> vertexAttributes, Shader shader) GameObject(std::vector<float>& vertices, std::vector<VertexAttribute> vertexAttributes)
: vertices{ vertices }, vertexAttributes{ vertexAttributes }, shader{shader}, Position{glm::vec3(0.0f)} : vertices{ vertices }, vertexAttributes{ vertexAttributes }, Position{glm::vec3(0.0f)}
{ {
Init(); Init();
} }
GameObject(std::vector<float> &vertices, std::vector<VertexAttribute> vertexAttributes, Shader shader, glm::vec3& position) GameObject(std::vector<float> &vertices, std::vector<VertexAttribute> vertexAttributes, glm::vec3& position)
: vertices{vertices}, vertexAttributes{ vertexAttributes }, shader{ shader }, Position{position} : vertices{vertices}, vertexAttributes{ vertexAttributes }, Position{position}
{ {
Init(); Init();
} }
@ -60,11 +58,10 @@ namespace Nebulix
{ {
glBindVertexArray(vertexArray); glBindVertexArray(vertexArray);
// TODO: Set shader matrices. Wait for materials // TODO: Use shader; Set shader matrices. Wait for materials
shader.Use();
//glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs
glDrawArrays(GL_TRIANGLES, 0, vertices.size()); // for VAOs glDrawArrays(GL_TRIANGLES, 0, nrOfVertices); // for VAOs
} }
@ -77,11 +74,12 @@ namespace Nebulix
private: private:
std::vector<float> vertices; std::vector<float> vertices;
Shader shader;
GLuint vertexBuffer, vertexArray; GLuint vertexBuffer, vertexArray;
std::vector<VertexAttribute> vertexAttributes; std::vector<VertexAttribute> vertexAttributes;
int nrOfVertices;
void Init() void Init()
{ {
glGenVertexArrays(1, &vertexArray); glGenVertexArrays(1, &vertexArray);
@ -89,7 +87,7 @@ namespace Nebulix
glBindVertexArray(vertexArray); glBindVertexArray(vertexArray);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices.data(), GL_STATIC_DRAW); glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(vertices[0]), vertices.data(), GL_STATIC_DRAW);
int stride = 0; int stride = 0;
for (size_t i = 0; i < vertexAttributes.size(); i++) for (size_t i = 0; i < vertexAttributes.size(); i++)
@ -98,12 +96,22 @@ namespace Nebulix
} }
int offset = 0; int offset = 0;
int nrNonVertices = 0;
for (size_t i = 0; i < vertexAttributes.size(); i++) for (size_t i = 0; i < vertexAttributes.size(); i++)
{ {
VertexAttribute attr = vertexAttributes[i]; VertexAttribute attr = vertexAttributes[i];
glVertexAttribPointer(i, attr.NrOfElements, attr.AttributeType, attr.Normalised, stride, (void*)offset); glVertexAttribPointer(i, attr.NrOfElements, attr.AttributeType, attr.Normalised, stride, (void*)offset);
glEnableVertexAttribArray(i); glEnableVertexAttribArray(i);
offset += attr.Stride; offset += attr.Stride;
if (i != 0)
nrNonVertices += attr.NrOfElements;
}
for (size_t i = 0; i < vertices.size(); i += 3)
{
nrOfVertices++;
i += nrNonVertices;
} }
} }
}; };

View File

@ -1,7 +1,6 @@
#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 vec2 aTexCoord;
layout (location = 2) in vec2 aTexCoord;
out vec3 ourColour; out vec3 ourColour;
out vec2 texCoord; out vec2 texCoord;