opengl 在顶点着色器中使用cos和时间收缩和增长对象

zqdjd7g9  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(163)

我的问题是,我必须使用一个时间变量和一个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);

}

the rabbit

brccelvz

brccelvz1#

您必须缩放顶点坐标:

float scaleFactor = 0.2 * (cos((2 * PI) / time * 100) + 2.0);
gl_Position = Proj * View * Model * vec4(Position * scaleFactor, 1.0);

但是,我建议在CPU上缩放模型转换矩阵:

glm::mat4 modelMatrix = glm::scale(o->frame()->getModelMatrix(), glm::vec3(scaleFactor));
glProgramUniformMatrix4fv(m_ProgramPipeline->getId(),
    l_Model, 1, GL_FALSE, glm::value_ptr(modelMatrix));

相关问题