/* Initial function, called before display */ void init(GLWrapper *glw) { printInstructions(); angle_x = 0.0f; angle_x_inc = 0.0f; angle_y = 0.0f; angle_y_inc = 0.0f; angle_z = 0.0f; angle_z_inc = 0.1f; scale_val = 1.0; move_model_x = 0; move_model_y = 0; move_model_z = 0; look_x = 0; look_y = 0; look_z = 0; aspect_ratio = 1.3333f; // Generate index (name) for one vertex array object glGenVertexArrays(1, &vao); // Create the vertex array object and make it current glBindVertexArray(vao); /* Define an array of colours */ float vertexColours[] = { 0.627f, 0.627f, 0.627f, 1.0f }; /* Create vec4 arrays for each object and vec3 arrays to contain normals*/ Gear gear; glm::vec4 * gearTest = gear.createGear(radius, sides, teeth, 0.195f, 0.0f); glm::vec3 * gearOneNormal = gear.calculateNormals(gearTest, sides, teeth); glm::vec4 * gearTwo = gear.createGear(0.3, 10, 5, 0.180f, 35.0f); glm::vec3 * gearTwoNormal = gear.calculateNormals(gearTwo, 10, 5); glm::vec4 * gearThree = gear.createGear(radius, sides, teeth, 0.195f, 24.0f); glm::vec3 * gearThreeNormal = gear.calculateNormals(gearThree, sides, teeth); glm::vec4 * gearFour = gear.createGear(1.0, 26, 16, 0.195f, 10.0f); glm::vec3 * gearFourNormal = gear.calculateNormals(gearFour, 26, 20); Crank crankClass; glm::vec4 * crank = crankClass.buildCrank(); glm::vec3 * crankNormal = crankClass.calculateNormals(crank); /* Create a vertex buffer object to store vertices */ glGenBuffers(1, &positionBufferGearOne); glBindBuffer(GL_ARRAY_BUFFER, positionBufferGearOne); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec4)), gearTest, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store normals */ glGenBuffers(1, &gearOneNormals); glBindBuffer(GL_ARRAY_BUFFER, gearOneNormals); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec3)), gearOneNormal, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store vertices */ glGenBuffers(1, &positionBufferGearTwo); glBindBuffer(GL_ARRAY_BUFFER, positionBufferGearTwo); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec4)), gearTwo, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store normals */ glGenBuffers(1, &gearTwoNormals); glBindBuffer(GL_ARRAY_BUFFER, gearTwoNormals); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec3)), gearTwoNormal, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store vertices */ glGenBuffers(1, &positionBufferGearThree); glBindBuffer(GL_ARRAY_BUFFER, positionBufferGearThree); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec4)), gearThree, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store normals */ glGenBuffers(1, &gearThreeNormals); glBindBuffer(GL_ARRAY_BUFFER, gearThreeNormals); glBufferData(GL_ARRAY_BUFFER, (368 * sizeof(glm::vec3)), gearThreeNormal, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store vertices */ glGenBuffers(1, &positionBufferGearFour); glBindBuffer(GL_ARRAY_BUFFER, positionBufferGearFour); glBufferData(GL_ARRAY_BUFFER, (700 * sizeof(glm::vec4)), gearFour, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store normals */ glGenBuffers(1, &gearFourNormals); glBindBuffer(GL_ARRAY_BUFFER, gearFourNormals); glBufferData(GL_ARRAY_BUFFER, (700 * sizeof(glm::vec3)), gearFourNormal, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store vertices */ glGenBuffers(1, &positionBufferCrank); glBindBuffer(GL_ARRAY_BUFFER, positionBufferCrank); glBufferData(GL_ARRAY_BUFFER, (72 * sizeof(glm::vec4)), crank, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store normals */ glGenBuffers(1, &crankNormals); glBindBuffer(GL_ARRAY_BUFFER, crankNormals); glBufferData(GL_ARRAY_BUFFER, (72 * sizeof(glm::vec3)), crankNormal, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); /* Create a vertex buffer object to store vertex colours */ glGenBuffers(1, &colourObject); glBindBuffer(GL_ARRAY_BUFFER, colourObject); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexColours), vertexColours, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); try { program = glw->LoadShader("lab2.vert", "lab2.frag"); } catch (std::exception &e) { std::cout << "Caught exception: " << e.what() << std::endl; std::cin.ignore(); exit(0); } /* Define uniforms to send to vertex shader */ modelID = glGetUniformLocation(program, "model"); viewID = glGetUniformLocation(program, "view"); projectionID = glGetUniformLocation(program, "projection"); }