Jump to content

  • Log In with Google      Sign In   
  • Create Account


Problem load multiple meshes


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
8 replies to this topic

#1 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 23 January 2013 - 02:43 PM

Hi!

 

I have a method that load a mesh from .obj, and Initialice. It works when I load one mesh only...But If I load two o more different meshes, the first that I load take the values ( vertices, indices... ) from the second. I think that the problem is in VAO or VBO, but i can´t found the error.

 

There is the initialice method from Mesh Class:

 

void MeshPart::Initialize()
{
    // Creamos el VAO

    glGenVertexArrays(1, &BufferIds[0]);

    ExitOnGLError("ERROR: No se puede generar el VAO");
    glBindVertexArray(BufferIds[0]);
    ExitOnGLError("ERROR: No se puede bindear el VAO");

    // Activamos dos vertex attribute locations
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);
    ExitOnGLError("ERROR: No se puede activar los vertex attributes");

    // Creamos los VBO
    glGenBuffers(2, &BufferIds[1]);
    ExitOnGLError("ERROR: No se pueden generar los buffer objects");

    // Bindeamos el VBO al VAO
    glBindBuffer(GL_ARRAY_BUFFER, BufferIds[1]);
    glBufferData(GL_ARRAY_BUFFER, vtn.size()*sizeof(VertexTextureNormal), &vtn[0], GL_STATIC_DRAW);
    ExitOnGLError("ERROR: No se puede bindear el VBO al VAO");

    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(vtn[0]) ,0);
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(vtn[0]) , (GLvoid*) sizeof(vtn[0].position));
    ExitOnGLError("ERROR: Could not set VAO attributes");

    // Creamos el IBO
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferIds[2]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(GLuint), &indices.front(), GL_STATIC_DRAW);
    ExitOnGLError("ERROR: No se puede bindear el IBO al VAO");

    glBindVertexArray(0);
}

 

 

Does anyone know what happens to me?

 

 



Sponsor:

#2 BornToCode   Members   -  Reputation: 923

Like
0Likes
Like

Posted 23 January 2013 - 05:24 PM

Can i see how you have your render function set up


Edited by BornToCode, 23 January 2013 - 05:26 PM.


#3 L. Spiro   Crossbones+   -  Reputation: 13396

Like
0Likes
Like

Posted 23 January 2013 - 05:25 PM

MeshPart should be an instancable class, not static.  BufferIds should be a non-static member of that class.

After ensuring this, also ensure that you are rendering each instance separately rather than accidentally rendering only the first one or only the last one.

 

 

L. Spiro


It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#4 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 24 January 2013 - 08:50 AM

the render function of meshparts:

 

 

 

void MeshPart::Draw()
{
    glBindVertexArray(BufferIds[0]);
    ExitOnGLError("ERROR: No se puede bindear el VAO para dibujar");


    glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, (GLvoid*)0);
    ExitOnGLError("ERROR: No se puede dibujar el meshpart");


    glBindVertexArray(0);
}
 


#5 BornToCode   Members   -  Reputation: 923

Like
0Likes
Like

Posted 24 January 2013 - 08:54 AM

If i remember correctly from the doc, vao does not store the vbo information. So i would try to also glBind the vbo you want to use as well before calling calling drawElements



#6 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 24 January 2013 - 09:07 AM

I add glBindBuffer(GL_ARRAY_BUFFER, BufferIds[1]) before calling DrawElements and it doesn´t work.



#7 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 24 January 2013 - 09:27 AM

The problem isn´t the VAO or VBO. Before I load the cube, the plane have his data. After I load the cube, plane have the cube data. While the data cube load , the plane have the correctly data. I don´t know what its the problem. At least VBO and VAO are discarted.

 

Thanks for your attention.


Edited by ShotoReaper, 24 January 2013 - 01:37 PM.


#8 L. Spiro   Crossbones+   -  Reputation: 13396

Like
0Likes
Like

Posted 24 January 2013 - 04:57 PM

The problem isn´t the VAO or VBO. Before I load the cube, the plane have his data. After I load the cube, plane have the cube data. While the data cube load , the plane have the correctly data. I don´t know what its the problem. At least VBO and VAO are discarted.
 
Thanks for your attention.

That is not consistent with what code you have shown, in which it is very clear that meshes are instances and not over-writable by standard means. There are of course mistakes that still could lead to this result but you will need to show more code.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#9 ShotoReaper   Members   -  Reputation: 149

Like
0Likes
Like

Posted 25 January 2013 - 09:21 AM

I discover my problem, the mesh variable from actor class...is static!!






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