我的问题是,我必须使用一个时间变量和一个cos()来使兔子变大和变小,我设法将时间变量传递给顶点着色器,但我完全不知道如何使兔子变大或变小。我尝试了一些在网上找到的公式,但没有一个有效。我将显示代码,在那里我将变量时间传递给顶点着色器和顶点着色器。
对不起英语不是我的第一语言
我动画功能:
void MaterialTP2::animate(Node* o, const float elapsedTime) {
Camera * test = Scene::getInstance()->camera();
glProgramUniformMatrix4fv(m_ProgramPipeline->getId(), l_View, 1, GL_FALSE, glm::value_ptr(test->getViewMatrix()));
glProgramUniformMatrix4fv(m_ProgramPipeline->getId(), l_Model, 1, GL_FALSE, glm::value_ptr(o->frame()->getModelMatrix()));
glProgramUniformMatrix4fv(m_ProgramPipeline->getId(), l_Proj, 1, GL_FALSE, glm::value_ptr(test->getProjectionMatrix()));
glProgramUniform1f(m_ProgramPipeline->getId(), glGetUniformLocation(vp->getId(), "time"), elapsedTime);
}
这是我顶点着色器:
# version 460
# define PI 3.1415926538
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Proj;
uniform float time;
out gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[];
};
layout (location = 0) in vec3 Position;
layout(location = 2) in vec3 normal;
varying vec3 out_color;
void main()
{
float scaleFactor = 0.2 * cos((2 * PI) / time * 100 );
gl_Position = Proj * View * Model * vec4(Position ,1.0) ;
out_color = 0.5 * normal + vec3(0.5, 0.5, 0.5);
}
1条答案
按热度按时间brccelvz1#
您必须缩放顶点坐标:
但是,我建议在CPU上缩放模型转换矩阵: