fuck c++
This commit is contained in:
parent
d327791de9
commit
cdf01052da
2 changed files with 10047 additions and 27 deletions
9965
assignment-2a/examples/teapot.obj
Normal file
9965
assignment-2a/examples/teapot.obj
Normal file
File diff suppressed because it is too large
Load diff
|
@ -5,14 +5,17 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <x86intrin.h>
|
#include <x86intrin.h>
|
||||||
#include <xmmintrin.h>
|
#include <xmmintrin.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
// Unfortunately this must be included first because it does some annoying check
|
// Unfortunately this must be included first because it does some annoying check
|
||||||
// that vomits if GLFW has already been included (dumb)
|
// that vomits if GLFW has already been included (dumb)
|
||||||
|
@ -97,6 +100,12 @@ GLdouble TRANSLATE_DELTA_X = 2.0 / window_width;
|
||||||
GLdouble TRANSLATE_DELTA_Y = -2.0 / window_height;
|
GLdouble TRANSLATE_DELTA_Y = -2.0 / window_height;
|
||||||
GLdouble translate_x = 0.0, translate_y = 0.0;
|
GLdouble translate_x = 0.0, translate_y = 0.0;
|
||||||
|
|
||||||
|
vector<ColorType3D> colors;
|
||||||
|
vector<FloatType2D> vertices;
|
||||||
|
|
||||||
|
bool read_file = false;
|
||||||
|
string file_path;
|
||||||
|
|
||||||
// Matrices
|
// Matrices
|
||||||
GLfloat rotation_matrix[16], translation_matrix[16], scale_matrix[16];
|
GLfloat rotation_matrix[16], translation_matrix[16], scale_matrix[16];
|
||||||
|
|
||||||
|
@ -181,37 +190,68 @@ static void cursor_pos_callback(GLFWwindow *window, double xpos, double ypos) {
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void init(void) {
|
void init(void) {
|
||||||
ColorType3D colors[NVERTICES];
|
|
||||||
FloatType2D vertices[NVERTICES];
|
|
||||||
GLuint vao[1], buffer, program, location1, location2;
|
GLuint vao[1], buffer, program, location1, location2;
|
||||||
|
|
||||||
zeroInitGlfloats(rotation_matrix, 16);
|
zeroInitGlfloats(rotation_matrix, 16);
|
||||||
zeroInitGlfloats(translation_matrix, 16);
|
zeroInitGlfloats(translation_matrix, 16);
|
||||||
zeroInitGlfloats(scale_matrix, 16);
|
zeroInitGlfloats(scale_matrix, 16);
|
||||||
|
|
||||||
// clang-format off
|
if (read_file) {
|
||||||
// set up some hard-coded colors and geometry
|
// C++ is the most disgusting language ever invented and we should get rid
|
||||||
// this part can be customized to read in an object description from a file
|
// of it as fast as possible. Just look at this mess:
|
||||||
colors[0].r = 1; colors[0].g = 1; colors[0].b = 1; // white
|
|
||||||
colors[1].r = 1; colors[1].g = 0; colors[1].b = 0; // red
|
|
||||||
colors[2].r = 1; colors[2].g = 0; colors[2].b = 0; // red
|
|
||||||
colors[3].r = 1; colors[3].g = 1; colors[3].b = 1; // white
|
|
||||||
colors[4].r = 0; colors[4].g = 0; colors[4].b = 1; // blue
|
|
||||||
colors[5].r = 0; colors[5].g = 0; colors[5].b = 1; // blue
|
|
||||||
colors[6].r = 1; colors[6].g = 1; colors[6].b = 1; // white
|
|
||||||
colors[7].r = 0; colors[7].g = 1; colors[7].b = 1; // cyan
|
|
||||||
colors[8].r = 0; colors[8].g = 1; colors[8].b = 1; // cyan
|
|
||||||
|
|
||||||
vertices[0].x = 0; vertices[0].y = 0.25; // center
|
ifstream f(file_path);
|
||||||
vertices[1].x = 0.25; vertices[1].y = 0.5; // upper right
|
|
||||||
vertices[2].x = -0.25; vertices[2].y = 0.5; // upper left
|
if (!f.is_open()) {
|
||||||
vertices[3].x = 0; vertices[3].y = 0.25; // center (again)
|
printf("Could not open file %s\n", file_path.c_str());
|
||||||
vertices[4].x = 0.25; vertices[4].y = -0.5; // low-lower right
|
exit(1);
|
||||||
vertices[5].x = 0.5; vertices[5].y = -0.25; // mid-lower right
|
}
|
||||||
vertices[6].x = 0; vertices[6].y = 0.25; // center (again)
|
|
||||||
vertices[7].x = -0.5; vertices[7].y = -0.25; // low-lower left
|
string contents, line;
|
||||||
vertices[8].x = -0.25; vertices[8].y = -0.5; // mid-lower left
|
f >> contents;
|
||||||
// clang-format on
|
f.close();
|
||||||
|
|
||||||
|
istringstream iss(contents);
|
||||||
|
for (std::string line; std::getline(iss, line);) {
|
||||||
|
printf("line: '%s'\n", line.c_str());
|
||||||
|
if (line.find_first_not_of("\t\n ") == string::npos) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
istringstream iss2(line);
|
||||||
|
string a;
|
||||||
|
std::getline(iss2, a, ',');
|
||||||
|
|
||||||
|
if (a == "v") {
|
||||||
|
printf("hello %s\n", line.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// clang-format off
|
||||||
|
// set up some hard-coded colors and geometry
|
||||||
|
// this part can be customized to read in an object description from a file
|
||||||
|
colors.push_back({ .r = 1, .g = 1, .b = 1 }); // white
|
||||||
|
colors.push_back({ .r = 1, .g = 0, .b = 0 }); // red
|
||||||
|
colors.push_back({ .r = 1, .g = 0, .b = 0 }); // red
|
||||||
|
colors.push_back({ .r = 1, .g = 1, .b = 1 }); // white
|
||||||
|
colors.push_back({ .r = 0, .g = 0, .b = 1 }); // blue
|
||||||
|
colors.push_back({ .r = 0, .g = 0, .b = 1 }); // blue
|
||||||
|
colors.push_back({ .r = 1, .g = 1, .b = 1 }); // white
|
||||||
|
colors.push_back({ .r = 0, .g = 1, .b = 1 }); // cyan
|
||||||
|
colors.push_back({ .r = 0, .g = 1, .b = 1 }); // cyan
|
||||||
|
|
||||||
|
vertices.push_back({ .x = 0, .y = 0.25 }); // center
|
||||||
|
vertices.push_back({ .x = 0.25, .y = 0.5 }); // upper right
|
||||||
|
vertices.push_back({ .x = -0.25, .y = 0.5 }); // upper left
|
||||||
|
vertices.push_back({ .x = 0, .y = 0.25 }); // center (again)
|
||||||
|
vertices.push_back({ .x = 0.25, .y = -0.5 }); // low-lower right
|
||||||
|
vertices.push_back({ .x = 0.5, .y = -0.25 }); // mid-lower right
|
||||||
|
vertices.push_back({ .x = 0, .y = 0.25 }); // center (again)
|
||||||
|
vertices.push_back({ .x = -0.5, .y = -0.25 }); // low-lower left
|
||||||
|
vertices.push_back({ .x = -0.25, .y = -0.5 }); // mid-lower left
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
||||||
// Create and bind a vertex array object
|
// Create and bind a vertex array object
|
||||||
glGenVertexArrays(1, vao);
|
glGenVertexArrays(1, vao);
|
||||||
|
@ -221,12 +261,15 @@ void init(void) {
|
||||||
// position and color data
|
// position and color data
|
||||||
glGenBuffers(1, &buffer);
|
glGenBuffers(1, &buffer);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||||
|
cout << vertices.size() << " " << colors.size() << endl;
|
||||||
glBufferData(
|
glBufferData(
|
||||||
GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(colors), vertices,
|
GL_ARRAY_BUFFER, vertices.size() + colors.size(), vertices.data(),
|
||||||
GL_STATIC_DRAW
|
GL_STATIC_DRAW
|
||||||
);
|
);
|
||||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
|
glBufferSubData(GL_ARRAY_BUFFER, 0, vertices.size(), vertices.data());
|
||||||
glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(colors), colors);
|
glBufferSubData(
|
||||||
|
GL_ARRAY_BUFFER, vertices.size(), colors.size(), colors.data()
|
||||||
|
);
|
||||||
|
|
||||||
// Define the names of the shader files
|
// Define the names of the shader files
|
||||||
std::stringstream vshader, fshader;
|
std::stringstream vshader, fshader;
|
||||||
|
@ -261,9 +304,21 @@ void init(void) {
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
char c;
|
||||||
int i;
|
int i;
|
||||||
GLFWwindow *window;
|
GLFWwindow *window;
|
||||||
|
|
||||||
|
while ((c = getopt(argc, argv, "abc:")) != -1)
|
||||||
|
switch (c) {
|
||||||
|
default:
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc > optind) {
|
||||||
|
read_file = true;
|
||||||
|
file_path = argv[optind];
|
||||||
|
}
|
||||||
|
|
||||||
// Define the error callback function
|
// Define the error callback function
|
||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue