实现三维移动模型:
添加类Transform
#include <glm/gtx/transform.hpp>
class Transform
{
public :
Transform(const glm::vec& pos =glm::vec3(),
const glm::vec3&rot=glm::vec3(),
const gm::vec4 &scale=glm::vec3(1.0f,1.0f,1.0f)
{
this->pos=pos;
this->rot=rot;
this->scale=scale;
} );
~ Transform();
inline glm::vec3*GetPos(){return &pos;}
inline glm::vec3*GetPos(){return &rot; }
inline glm::vec3*GetScale(){return &scale;}
inline void SetPos(glm::vec3& pos) {this->pos=pos;}
inline void SetRot(glm::vec3& rot) {this->rot=rot;}
inline void SetScale(glm::vec3& scale){this->scale=scale;}
inline glm::mat4 GetModel()const
{
glm::mat4 posMat=glm::translate(pos);
glm::mat4 scaleMat=glm::scale(scale);
glm::mat4 rotX=glm::rotate(rot.x,glm::vec3(1.0,0.0,0.0));
glm::mat4 rotY=glm::rotate(rot.y,glm::vec3(0.0,1.0,0.0));
glm::mat4 rotZ=glm::rotate(rot.z,glm::vec3(0.0,0.0,1.0));
glm::mat4 rotMat=rotX*rotY*rotZ;
return posMat*scaleMat;
}
private:
glm::vec3 pos;
glm::vec3 rot;
glm::vec3 scale;
}
修改着色basicShader.vs
uniform vec2 texCoord0;
void main()
{
gl_Position=transform*vec4(position,1.0);
texCoord0=texCoord;
}
在shader.h中创建枚举类型
enum{
TRANSFORM_U,
NUM_UNIFORM
};
GLuint m_uniforms[NUM_UNIFORM];
在shader.cpp中
m_uniforms[TRANSFORM_U]=glGetUniformLocation(m_program,"transform");//获取到着色器程序中uniform对应的值
添加函数void Update(const Transform& transform);
实现函数void Update(const Transform & transform)//直接改变图形的绘制
{
glm::mat4 model=transform.GetModel();
glUniformMatrix4fv(m_uniforms[TRANSFORM_U],1,GL_FALSE,&model[0][0]);
}
通过着色漆把图形绘制出来
Transform transform;
float sinCounter=sinf(counter);
transform.GetPos()->x=sinCounter;
transform.GetRot()->z=counter*50;
shader.Update(transform);
counter+=0.01f;