How can I apply a rotatio matrix to a model matrix

Started by
0 comments, last by Hector San Roman Lanza 11 years, 4 months ago
I have the next code:




Mesh* Cube::mesh;
Shader* Cube::shader;

GLuint Cube::ShaderIds[3] = { 0 },
Cube::TextureId;

glm::mat4 Cube::ModelMatrix = glm::mat4(1.0); //IDENTITY MATRIX

GLuint Cube::ModelMatrixUniformLocation,
Cube::Tex0Loc;

Cube::Cube()
{
//ctor
}

glm::vec3 Cube::getPosition(void)
{
return position;
}
void Cube::setPosition(glm::vec3 value)
{
position = value;
}

glm::vec3 Cube::getEulerRotation(void)
{
return MatToVec3(rotationMatrix);
}
void Cube::setEulerRotation(float angle, glm::vec3 axis)
{
rotationMatrix = glm::rotate(rotationMatrix, angle, axis);
}

void Cube::Initialize(void)
{
ModelMatrix = glm::mat4(1.0);
setVisible(true);
}

void Cube::Load(void)
{
mesh = getParent()->getEngine()->content.Load<Mesh>("Models/cube2.obj");

shader = getParent()->getEngine()->content.Load<Shader>("Shaders/simpleshader.glsl");
//Obtenemos las uniform locations de las matrices y las texturas
ModelMatrixUniformLocation = shader->GetUniformLocation("ModelMatrix");
getParent()->getEngine()->ViewMatrixUniformLocation = shader->GetUniformLocation("ViewMatrix");
getParent()->getEngine()->ProjectionMatrixUniformLocation = shader->GetUniformLocation("ProjectionMatrix");
ExitOnGLError("ERROR: Could not get the uniform locations");

// Cargamos una textura
Texture* texture0 = getParent()->getEngine()->content.Load<Texture>("Textures/cube.bmp");
Tex0Loc = shader->GetUniformLocation("texture0"); //obtenemos la localizacion del parametro texture0
ExitOnGLError("Error: Could not load texture");
}

void Cube::Update(void)
{
// I call to SetEulerRotation from here
setEulerRotation(90.0f * getParent()->getEngine()->deltaTime, glm::vec3(0,1,0));
}
void Cube::Draw(void)
{
shader->Use();

//I want apply the rotation matrix to model matrix here.
/*
ModelMatrix = glm::scale(
glm::mat4(1.0f),
glm::vec3(.5f)
);*/

//ModelMatrix = glm::rotate(ModelMatrix, 90.0f * getParent()->getEngine()->deltaTime, glm::vec3(0,1,0));
// Apply the model matrix

glUniformMatrix4fv(ModelMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(ModelMatrix));
ExitOnGLError("ERROR: Could not set the model matrix");

// Apply the view matrix
Camera *cam = (Camera*)getParent()->getEngine()->services.GetService(0);
if(cam == NULL)
{
ExitOnError("ERROR: Camara no colocada en el World");
}
glUniformMatrix4fv(getParent()->getEngine()->ViewMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(cam->getView()));
ExitOnGLError("ERROR: Could not set the view matrix");

// Aplicamos la matrix de proyeccion
glUniformMatrix4fv(getParent()->getEngine()->ProjectionMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(cam->getProjection()));
ExitOnGLError("ERROR: Could not set the projection matrix");

glUniform1i(Tex0Loc, 0);

mesh->Draw();
}

I want to apply the rotationMatrix (set in 'SetEulerRotation' method) to the ModelMatrix in the Draw method, but i don´t know how it does.
Can anybody help me?
Advertisement
Ok, i found how i can do it xDD. Sorry for the inconvenience.

I must set ModelMatrix = rotationMatrix.

Stupid error....

This topic is closed to new replies.

Advertisement