예제 #1
0
//==============================================================================
// 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);
}
예제 #2
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);
}