Jump to content

  • Log In with Google      Sign In   
  • Create Account


How can I apply a rotatio matrix to a model matrix


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 15 December 2012 - 11:05 AM

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)
    {
	   [b] // I call to SetEulerRotation from here[/b]
	    setEulerRotation(90.0f * getParent()->getEngine()->deltaTime, glm::vec3(0,1,0));
    }
    void Cube::Draw(void)
    {
	    shader->Use();
   
[b]        //I want apply the rotation matrix to model matrix here.[/b]
    /*
	    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?

Sponsor:

#2 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 15 December 2012 - 11:48 AM

Ok, i found how i can do it xDD. Sorry for the inconvenience.

I must set ModelMatrix = rotationMatrix.

Stupid error....




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS