opengl 实时旋转木箱动态改变混合值

实现这个功能之前需要你学习一下子矩阵的运算,包括向量*矩阵,矩阵*矩阵等等知识:

推荐数学向量

通过改变矩阵动态的完成物体的运动,用到了第三方库glm:

关键转换:

boxShader.vs:

#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aColor;
layout(location = 2) in vec2 aTexCoord;
out vec3 ourColor;
out vec2 texCoord;
uniform mat4 transform;
void main() {
	gl_Position = transform * vec4(aPos,1.0);
	ourColor = aColor;
	texCoord = aTexCoord;
}

boxShader.fs:

#version 330 core
out vec4 FragColor;
in vec3 ourColor;
in vec2 texCoord;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform float mixNumber;
void main() {
	FragColor = mix(texture(texture1,vec2(texCoord.x,texCoord.y)),texture(texture2,vec2(texCoord.x,texCoord.y)),mixNumber);
}

transform就是那个我们通过应用程序穿进去的矩阵变量值,transform有可能是几个变换组合而成的效果矩阵,

while (!glfwWindowShouldClose(window))
	{
		// input
		// -----
		processInput(window);
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);
		float timeVary = (float)glfwGetTime();
		// 生成变换矩阵
		glm::mat4 trans;
		// 移动到(0.5,-0.5)处
		trans = glm::translate(trans,glm::vec3(0.0f,0.0f,0.0f));
		trans = glm::rotate(trans, timeVary, glm::vec3(0.0f, 1.0f, 0.0f));
		trans = glm::rotate(trans, timeVary, glm::vec3(0.0f, 0.0f, 1.0f));
		trans = glm::rotate(trans, timeVary, glm::vec3(1.0f, 0.0f, 0.0f));
		//trans = glm::scale(trans, glm::vec3(0.5f, 0.5f, 0.5f));
		glUniform1f(glGetUniformLocation(shaderItem.ID, "mixNumber"), mixNumber);
		glUniformMatrix4fv(glGetUniformLocation(shaderItem.ID, "transform"),1,GL_FALSE,glm::value_ptr(trans));

		//double curTime = glfwGetTime();
		//shaderItem.setFloat("offsetY", 0.3);
		//shaderItem.setFloat("degree",curTime);
		//// draw
		//drawSomgthing();
		//drawMyElement(VAO,textureArr,sizeof(textureArr) / sizeof(*textureArr));
		//shaderItem.use();
		drawMyElement(VAO,textureArr, sizeof(textureArr) / sizeof(*textureArr));
		// -------------------------------------------------------------------------------
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

这里的效果是:沿着x,y,z轴旋转所得到的效果

猜你喜欢

转载自blog.csdn.net/lck8989/article/details/101370521
今日推荐