added GameObject class for future use (replace current renering with this class before continuing with the chapters)
This commit is contained in:
parent
60f01db034
commit
5c42364e43
|
@ -138,7 +138,6 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\..\libraries\glad\src\glad.c" />
|
<ClCompile Include="..\..\..\libraries\glad\src\glad.c" />
|
||||||
<ClCompile Include="util\camera\camera.cpp" />
|
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
<ClCompile Include="Shaders\Shader.cpp" />
|
<ClCompile Include="Shaders\Shader.cpp" />
|
||||||
<ClCompile Include="util\stb_image.cpp" />
|
<ClCompile Include="util\stb_image.cpp" />
|
||||||
|
@ -152,6 +151,7 @@
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="object\game_object.h" />
|
||||||
<ClInclude Include="util\camera\camera.h" />
|
<ClInclude Include="util\camera\camera.h" />
|
||||||
<ClInclude Include="Exceptions\IOException.h" />
|
<ClInclude Include="Exceptions\IOException.h" />
|
||||||
<ClInclude Include="Exceptions\Shaders\CreateProgramException.h" />
|
<ClInclude Include="Exceptions\Shaders\CreateProgramException.h" />
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
<ClCompile Include="util\stb_image.cpp">
|
<ClCompile Include="util\stb_image.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="util\camera\camera.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Shaders\Shader.h">
|
<ClInclude Include="Shaders\Shader.h">
|
||||||
|
@ -62,6 +59,9 @@
|
||||||
<ClInclude Include="util\camera\camera.h">
|
<ClInclude Include="util\camera\camera.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="object\game_object.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CopyFileToFolders Include="Shaders\default\default.frag" />
|
<CopyFileToFolders Include="Shaders\default\default.frag" />
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "util/camera/camera.h"
|
#include "util/camera/camera.h"
|
||||||
|
|
||||||
// Continue: https://learnopengl.com/Lighting/Colors
|
// Continue: https://learnopengl.com/Lighting/Colors
|
||||||
// Chapter: Not yet started
|
// Chapter: A lighting scene
|
||||||
//
|
//
|
||||||
// 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
|
||||||
|
|
110
src/Engine/object/game_object.h
Normal file
110
src/Engine/object/game_object.h
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
#include <exception>
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
|
#include "../shaders/Shader.h"
|
||||||
|
|
||||||
|
namespace Nebulix
|
||||||
|
{
|
||||||
|
struct VertexAttribute
|
||||||
|
{
|
||||||
|
GLenum AttributeType = GL_FLOAT;
|
||||||
|
GLboolean Normalised = GL_FALSE;
|
||||||
|
/// <summary>
|
||||||
|
/// The number of elements for this attribute.
|
||||||
|
/// For example: 1 float value for each the x,y,z coordinate of the vertex which means this variable should be set to 3
|
||||||
|
/// </summary>
|
||||||
|
int NrOfElements = 3;
|
||||||
|
int Stride;
|
||||||
|
|
||||||
|
VertexAttribute(GLenum attributeType = GL_FLOAT, GLboolean normalised = GL_FALSE, int nrOfElements = 3)
|
||||||
|
: AttributeType{ attributeType }, Normalised{ normalised }, NrOfElements{ nrOfElements }
|
||||||
|
{
|
||||||
|
if (attributeType == GL_INT)
|
||||||
|
Stride = nrOfElements * sizeof(int);
|
||||||
|
else if (attributeType == GL_FLOAT)
|
||||||
|
Stride = nrOfElements * sizeof(float);
|
||||||
|
else if (attributeType == GL_DOUBLE)
|
||||||
|
Stride = nrOfElements * sizeof(double);
|
||||||
|
else if (attributeType == GL_BOOL)
|
||||||
|
Stride = nrOfElements * sizeof(bool);
|
||||||
|
else if (attributeType == GL_BYTE)
|
||||||
|
Stride = nrOfElements * sizeof(char);
|
||||||
|
else
|
||||||
|
throw std::exception("ERROR::CONSTRUCT::VERTEX_ATTRIBUTE::NOT_IMPLEMENTED");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: move the triangle stuff to a seperate mesh class and use the mesh class here
|
||||||
|
// (in the final engine, this mesh class will be a component and a game object will just hold a list of different components)
|
||||||
|
class GameObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
glm::vec3 Position;
|
||||||
|
|
||||||
|
GameObject(std::vector<float>& vertices, std::vector<VertexAttribute> vertexAttributes, Shader shader)
|
||||||
|
: vertices{ vertices }, vertexAttributes{ vertexAttributes }, shader{shader}, Position{glm::vec3(0.0f)}
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
GameObject(std::vector<float> &vertices, std::vector<VertexAttribute> vertexAttributes, Shader shader, glm::vec3& position)
|
||||||
|
: vertices{vertices}, vertexAttributes{ vertexAttributes }, shader{ shader }, Position{position}
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: This method will only call "Shader.Use()" but will not set any properties.
|
||||||
|
// This is because I do not know the names and values of the properties. Most likely this will be possible after learning about materials
|
||||||
|
void Draw()
|
||||||
|
{
|
||||||
|
glBindVertexArray(vertexArray);
|
||||||
|
|
||||||
|
// TODO: Set shader matrices. Wait for materials
|
||||||
|
shader.Use();
|
||||||
|
|
||||||
|
//glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // for EBOs
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, vertices.size()); // for VAOs
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 GetModelMatrix()
|
||||||
|
{
|
||||||
|
glm::mat4 model = glm::mat4(1.0f);
|
||||||
|
// TODO: add properties for rotation/scale and add these to the model matrix
|
||||||
|
return glm::translate(model, Position);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<float> vertices;
|
||||||
|
Shader shader;
|
||||||
|
|
||||||
|
GLuint vertexBuffer, vertexArray;
|
||||||
|
std::vector<VertexAttribute> vertexAttributes;
|
||||||
|
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
glGenVertexArrays(1, &vertexArray);
|
||||||
|
glGenBuffers(1, &vertexBuffer);
|
||||||
|
glBindVertexArray(vertexArray);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
int stride = 0;
|
||||||
|
for (size_t i = 0; i < vertexAttributes.size(); i++)
|
||||||
|
{
|
||||||
|
stride += vertexAttributes[i].Stride;
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = 0;
|
||||||
|
for (size_t i = 0; i < vertexAttributes.size(); i++)
|
||||||
|
{
|
||||||
|
VertexAttribute attr = vertexAttributes[i];
|
||||||
|
glVertexAttribPointer(i, attr.NrOfElements, attr.AttributeType, attr.Normalised, stride, (void*)offset);
|
||||||
|
glEnableVertexAttribArray(i);
|
||||||
|
offset += attr.Stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -1 +0,0 @@
|
||||||
#include "camera.h"
|
|
Loading…
Reference in New Issue
Block a user