void GLPatch::initializeBuffers(ShaderProgram & shaderProgram) { std::vector<BezierPatch> patchesv; ReadBezierPatches("data/teapot.data", patchesv); float patchesf[patchesv.size()][192]; for (int i = 0; i < patchesv.size(); i++) { float patch[192]; paramSurfaces(patchesv[i], patch); m_numberOfPatches[i] = sizeof(patch) / sizeof(float); //i know this will be constant m_vertexPositionAttribute = glGetAttribLocation(shaderProgram.getProgram(), "aPosition"); GLuint m_Patch; m_Patches[i] = m_Patch; glGenBuffers(1, &m_Patch); glBindBuffer(GL_ARRAY_BUFFER, m_Patch); glBufferData(GL_ARRAY_BUFFER, sizeof(patch), patch, GL_STATIC_DRAW); } // glGenBuffers(1, &m_Patch); // glBindBuffer(GL_ARRAY_BUFFER, m_Patch); // glBufferData(GL_ARRAY_BUFFER, sizeof(patch), patch, GL_STATIC_DRAW); glm::vec3 Normal = glm::cross((patchesv[0][0][0] - patchesv[0][0][2]),(patchesv[0][0][2] - patchesv[0][3][3])); glm::vec3 N = glm::normalize(glm::vec3(Normal[0]+0.00001f,Normal[1]+0.000001f,Normal[2]+0.00001f)); glUniform4f(glGetUniformLocation(shaderProgram.getProgram(), "uNormal"), N[0], N[0], N[2], 1.0); //Get a handle to the shader attribute aPosition and set it up: m_vertexPositionAttribute = glGetAttribLocation(shaderProgram.getProgram(), "aPosition"); glVertexAttribPointer(m_vertexPositionAttribute, 3, GL_FLOAT, GL_FALSE, 0, 0); }
BezierPatchModel::BezierPatchModel(const char * filename) { level = 0; try { ReadBezierPatches(filename, patches); setLevel(1); } catch (const std::exception &e) { std::cerr << "Exception: " << e.what() << std::endl; } }