-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPrismObject.cpp
More file actions
95 lines (84 loc) · 3.81 KB
/
PrismObject.cpp
File metadata and controls
95 lines (84 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <stdio.h>
#include <iostream>
#include "C:\Users\jacob\source\repos\3DSnake\3DSnake\Shader.h"
#include "C:\Users\jacob\source\repos\3DSnake\3DSnake\stb_image.h"
#include "C:\Users\jacob\source\repos\3DSnake\3DSnake\PrismObject.h"
#include "C:\Users\jacob\source\repos\3DSnake\3DSnake\ObjectManager.h"
#include "C:\Users\jacob\source\repos\3DSnake\3DSnake\AppContext.h"
PrismObject::PrismObject(int vertexCount, Shader& shader, AppContext appContext) : Object(vertexCount, shader, appContext) {
this->orientationChanged = false;
}
//After making vertices, go through every one and look for value where x = xNeg, x = xPos and so one for each coordinate.
//Then store xNeg, xPos, yNeg, yPos, zNeg, zPos lists of indexes to edit when extending a prism in that direction
std::vector<float> generate_prism_vertices(float xNeg, float xPos, float yNeg, float yPos, float zNeg, float zPos, float range) {
std::vector<float> vertices = {
// Each row is a vertex
// X,Y,Z coords and texture coordinates (U,V)
//Front
xNeg, yNeg, zNeg, 0.0f, 0.0f,
xPos, yNeg, zNeg, range, 0.0f,
xPos, yPos, zNeg, range, range,
xPos, yPos, zNeg, range, range,
xNeg, yPos, zNeg, 0.0f, range,
xNeg, yNeg, zNeg, 0.0f, 0.0f,
//Back
xNeg, yNeg, zPos, 0.0f, 0.0f,
xPos, yNeg, zPos, range, 0.0f,
xPos, yPos, zPos, range, range,
xPos, yPos, zPos, range, range,
xNeg, yPos, zPos, 0.0f, range,
xNeg, yNeg, zPos, 0.0f, 0.0f,
//Left
xNeg, yPos, zPos, range, 0.0f,
xNeg, yPos, zNeg, range, range,
xNeg, yNeg, zNeg, 0.0f, range,
xNeg, yNeg, zNeg, 0.0f, range,
xNeg, yNeg, zPos, 0.0f, 0.0f,
xNeg, yPos, zPos, range, 0.0f,
//Right
xPos, yPos, zPos, range, 0.0f,
xPos, yPos, zNeg, range, range,
xPos, yNeg, zNeg, 0.0f, range,
xPos, yNeg, zNeg, 0.0f, range,
xPos, yNeg, zPos, 0.0f, 0.0f,
xPos, yPos, zPos, range, 0.0f,
//Bottom
xNeg, yNeg, zNeg, 0.0f, range,
xPos, yNeg, zNeg, range, range,
xPos, yNeg, zPos, range, 0.0f,
xPos, yNeg, zPos, range, 0.0f,
xNeg, yNeg, zPos, 0.0f, 0.0f,
xNeg, yNeg, zNeg, 0.0f, range,
//Top
xNeg, yPos, zNeg, 0.0f, range,
xPos, yPos, zNeg, range, range,
xPos, yPos, zPos, range, 0.0f,
xPos, yPos, zPos, range, 0.0f,
xNeg, yPos, zPos, 0.0f, 0.0f,
xNeg, yPos, zNeg, 0.0f, range
};
return vertices;
}
void generate_prism(PrismObject& prism, AppContext appContext, float xNeg, float xPos, float yNeg, float yPos, float zNeg, float zPos, float range) {
std::vector<float> vertices = generate_prism_vertices(xNeg, xPos, yNeg, yPos, zNeg, zPos, range);
prism.vertices = &vertices;
prism.generate_buffers((*prism.vertices).data(), sizeof(prism.vertices) * (*prism.vertices).size(), GL_STATIC_DRAW);
appContext.get_object_manager().add_default_attributes(prism);
}
void generate_prism(PrismObject& prism, std::vector<float>& vertices, AppContext appContext) {
prism.vertices = &vertices;
prism.generate_buffers(vertices.data(), (vertices).size() * sizeof(*(prism.vertices)), GL_STATIC_DRAW);
prism.generate_buffers((*prism.vertices).data(), sizeof(prism.vertices) * (*prism.vertices).size(), GL_STATIC_DRAW);
appContext.get_object_manager().add_default_attributes(prism);
prism.orientationChanged = false;
}
void set_orientation(PrismObject& prism, Direction direction, AppContext appContext) {
ObjectManager& objectManager = appContext.get_object_manager();
prism.vertices = &objectManager.get_orientation(direction);
prism.orientationChanged = true;
}