Skip to content

Commit 55fc29c

Browse files
committed
Tutorial 5 Animations
Tutorial 5 Animations
1 parent 8f9b84f commit 55fc29c

38 files changed

Lines changed: 33567 additions & 0 deletions
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#version 410 core
26+
27+
layout(location = 0) in vec3 vertOutColor;
28+
29+
30+
31+
32+
layout(location = 0) out vec4 outColor;
33+
34+
35+
void main()
36+
{
37+
outColor = vec4(1,1,1,1);
38+
outColor.rgb = vertOutColor;
39+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#version 410 core
26+
27+
uniform UniformData
28+
{
29+
float scale;
30+
};
31+
32+
33+
layout(location = 0) in vec3 position;
34+
layout(location = 1) in vec3 color;
35+
36+
37+
layout(location = 0) out vec3 vertOutColor;
38+
39+
void main()
40+
{
41+
gl_Position.xyz = position * scale;
42+
43+
gl_Position.w = 1.0;
44+
45+
vertOutColor = color;
46+
}

Tutorial5_Animations/Game/main.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#include <OGL3D/Game/OGame.h>
26+
#include <iostream>
27+
28+
int main()
29+
{
30+
try
31+
{
32+
OGame game;
33+
game.run();
34+
}
35+
catch (const std::exception& e)
36+
{
37+
std::wclog << e.what() << std::endl;
38+
return -1;
39+
}
40+
41+
return 0;
42+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <memory>
27+
#include <OGL3D/Graphics/OGraphicsEngine.h>
28+
#include <chrono>
29+
30+
31+
class OWindow;
32+
class OGame
33+
{
34+
public:
35+
OGame();
36+
~OGame();
37+
38+
virtual void onCreate();
39+
virtual void onUpdate();
40+
virtual void onQuit();
41+
42+
43+
void run();
44+
void quit();
45+
protected:
46+
bool m_isRunning = true;
47+
48+
//pay attention to the order of smart pointers
49+
//the first one defined (m_graphicsEngine) is the last to be deallocated
50+
//the last one defined (m_shader) is the first to be deallocated
51+
std::unique_ptr<OGraphicsEngine> m_graphicsEngine;
52+
std::unique_ptr<OWindow> m_display;
53+
54+
55+
OVertexArrayObjectPtr m_polygonVAO;
56+
OUniformBufferPtr m_uniform;
57+
OShaderProgramPtr m_shader;
58+
59+
std::chrono::system_clock::time_point m_previousTime;
60+
f32 m_scale = 0;
61+
};
62+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
#include <OGL3D/Math/OVec4.h>
28+
#include <OGL3D/Math/ORect.h>
29+
30+
class OGraphicsEngine
31+
{
32+
public:
33+
OGraphicsEngine();
34+
~OGraphicsEngine();
35+
public:
36+
OVertexArrayObjectPtr createVertexArrayObject(const OVertexBufferDesc& data);
37+
OUniformBufferPtr createUniformBuffer(const OUniformBufferDesc& desc);
38+
OShaderProgramPtr createShaderProgram(const OShaderProgramDesc& desc);
39+
public:
40+
void clear(const OVec4& color);
41+
void setViewport(const ORect& size);
42+
void setVertexArrayObject(const OVertexArrayObjectPtr& vao);
43+
void setUniformBuffer(const OUniformBufferPtr& buffer, ui32 slot);
44+
void setShaderProgram(const OShaderProgramPtr& program);
45+
void drawTriangles(const OTriangleType& triangleType, ui32 vertexCount, ui32 offset);
46+
};
47+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
29+
30+
class OShaderProgram
31+
{
32+
public:
33+
OShaderProgram(const OShaderProgramDesc& desc);
34+
~OShaderProgram();
35+
ui32 getId();
36+
void setUniformBufferSlot(const char* name, ui32 slot);
37+
private:
38+
void attach(const wchar_t* shaderFilePath, const OShaderType& type);
39+
void link();
40+
private:
41+
ui32 m_programId = 0;
42+
ui32 m_attachedShaders[2] = {};
43+
};
44+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
class OUniformBuffer
29+
{
30+
public:
31+
OUniformBuffer(const OUniformBufferDesc& desc);
32+
~OUniformBuffer();
33+
34+
void setData(void* data);
35+
36+
ui32 getId();
37+
private:
38+
ui32 m_id = 0;
39+
ui32 m_size = 0;
40+
};
41+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
29+
class OVertexArrayObject
30+
{
31+
public:
32+
OVertexArrayObject(const OVertexBufferDesc& data);
33+
~OVertexArrayObject();
34+
35+
ui32 getId();
36+
37+
ui32 getVertexBufferSize();
38+
ui32 getVertexSize();
39+
private:
40+
ui32 m_vertexBufferId = 0;
41+
ui32 m_vertexArrayObjectId = 0;
42+
OVertexBufferDesc m_vertexBufferData;
43+
};
44+

0 commit comments

Comments
 (0)