//============================================================================== // Loads Model Data into OpenGL and Stores Handles in Static Variables //============================================================================== void Tree::loadResources() { shaderProgram = ShaderUtil::createProgram("Tree", std::vector < GLenum > {GL_VERTEX_SHADER, GL_FRAGMENT_SHADER}, true); sPositionHandle = glGetAttribLocation(shaderProgram, "iPosition"); sNormalHandle = glGetAttribLocation(shaderProgram, "iNormal"); sSunHandle = glGetUniformLocation(shaderProgram, "uSunDirection"); sMVPHandle = glGetUniformLocation(shaderProgram, "uMVP"); sNormalMatrixHandle = glGetUniformLocation(shaderProgram, "uNormalMatrix"); ModelData data = ShaderUtil::loadModel("tree"); verticesVBO = data.getVerticesVBO(); normalsVBO = data.getNormalsVBO(); vertCount = data.getVertCount(); glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); glUseProgram(shaderProgram); //------------------------------------------------------------------------------ // Load Vertex Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, verticesVBO); glEnableVertexAttribArray(sPositionHandle); glVertexAttribPointer(sPositionHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); //------------------------------------------------------------------------------ // Load Normal Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, normalsVBO); glEnableVertexAttribArray(sNormalHandle); glVertexAttribPointer(sNormalHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); glUseProgram(0); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); }
void Villager::loadResources() { ModelData data = ShaderUtil::loadModel("villager"); verticesVBO = data.getVerticesVBO(); normalsVBO = data.getNormalsVBO(); boneWeightsVBO = data.getBoneWeightsVBO(); boneIndicesVBO = data.getBoneIndicesVBO(); vertCount = data.getVertCount(); baseSkeleton = data.getSkeleton(); std::vector<GLenum> shadersUsed {GL_VERTEX_SHADER, GL_FRAGMENT_SHADER}; shaderProgram = ShaderUtil::createProgram("Villager", shadersUsed, true); sMVPHandle = glGetUniformLocation(shaderProgram, "uMVP"); sSunHandle = glGetUniformLocation(shaderProgram, "uSunDirection"); sNormalMatrixHandle = glGetUniformLocation(shaderProgram, "uNormalMatrix"); sBoneWeightsHandle = glGetAttribLocation(shaderProgram, "iBoneWeights"); sBoneIndicesHandle = glGetAttribLocation(shaderProgram, "iBoneIndices"); sPositionHandle = glGetAttribLocation(shaderProgram, "iPosition"); sNormalHandle = glGetAttribLocation(shaderProgram, "iNormal"); sBoneMatricesHandle = glGetUniformLocation(shaderProgram, "uBoneMatrices"); glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); glUseProgram(shaderProgram); //------------------------------------------------------------------------------ // Load Vertex Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, verticesVBO); glEnableVertexAttribArray(sPositionHandle); glVertexAttribPointer(sPositionHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); //------------------------------------------------------------------------------ // Load Normal Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, normalsVBO); glEnableVertexAttribArray(sNormalHandle); glVertexAttribPointer(sNormalHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); //------------------------------------------------------------------------------ // Load Bone Weight Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, boneWeightsVBO); glEnableVertexAttribArray(sBoneWeightsHandle); glVertexAttribPointer(sBoneWeightsHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); //------------------------------------------------------------------------------ // Load Bone Indices Data //------------------------------------------------------------------------------ glBindBuffer(GL_ARRAY_BUFFER, boneIndicesVBO); glEnableVertexAttribArray(sBoneIndicesHandle); glVertexAttribPointer(sBoneIndicesHandle, 3, GL_FLOAT, GL_FALSE, 0, NULL); glUseProgram(0); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); }