C ++ OpenGL VBO ключевая проблема анимации - PullRequest
0 голосов
/ 21 сентября 2019

Это первая функция загрузки в main, с которой нет проблем.

   Model obj1(" stuff.obj"); 

Итак, выше приведен пример класса в другом заголовочном файле, который называется 'obj1'

* 1005.* Этот вызов точно ниже 2-й сетки.Здесь нет проблем. Также я планирую использовать его для загрузки других моделей позже.
// So this is an instance of that same class being called as 'obj2'.
 Model obj2(" stuff2.obj"); 

Ладно, ниже, я собираюсь попробовать анимацию ключевого кадра, установив новый меш, который будет загружен и подготовлен, когдаФункция рисования в MAIN () называется

 while (true)
{
    if (keystates[SDL_SCANCODE_RCTRL])         
        { 
 // This the problem right here below . THE THIRD LOAD It wont work. THIS ME TRYING TO LOAD THE 'obj2' again this time for a new mesh       
               Model obj2("stuff3.obj"); 
        }
}

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА OBJ НЕ является проблемой, и одновременно данные организованы и отправлены для обработки VAO & VBO для рисования

Ниже приведен код из файла заголовка, отличного от MAIN.

Итак, вот функция, которая рисует сетку.С этим нет проблем, чтобы вещи появлялись на экране, за исключением случаев, когда я хочу, чтобы новые вещи появлялись с третьей функцией загрузки в main ()

draw mesh()
    {
        glBindVertexArray(this->VAO);       
        glDrawElements(GL_TRIANGLES, this->indices.size(), GL_UNSIGNED_INT, 0);                                     
        glBindVertexArray(0); 
    }

Первые две функции загрузки использовали create () для установкидо vbo, vao рисовать объекты на экране.В то время как третий, который потерпел неудачу, использовал NewMesh (), который ниже create ().

void create()
    {
        // Create buffers/arrays
        glGenVertexArrays(1, &this->VAO);
        glGenBuffers(1, &this->VBO);
        glGenBuffers(1, &this->EBO);

        glBindVertexArray(this->VAO);

        // Load data into vertex buffers
        glBindBuffer(GL_ARRAY_BUFFER, this->VBO);
        glBufferData(GL_ARRAY_BUFFER, this->vertices.size() * sizeof(Vertex), &this->vertices[0], GL_DYNAMIC_DRAW);  // GL_DYNAMIC_DRAW  GL_STATIC_DRAW

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->EBO);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, this->indices.size() * sizeof(GLuint), &this->indices[0], GL_DYNAMIC_DRAW);
        // Set the vertex attribute pointers
        // Vertex Positions
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)0);
        // Vertex Normals
        glEnableVertexAttribArray(1);
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)offsetof(Vertex, Normal) );
        // Vertex Texture Coords
        glEnableVertexAttribArray(2);
        glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)offsetof(Vertex, TexCoords) );
    //  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glBindVertexArray(0);
    }

void NewMesh() 
    {  // Note NewMesh() does not work.     


        glBindVertexArray(this->VAO);  

        glBindBuffer(GL_ARRAY_BUFFER, this->VBO);

        glBufferData(GL_ARRAY_BUFFER, this->vertices.size() * sizeof(Vertex), &this->vertices[0], GL_DYNAMIC_DRAW);  // GL_DYNAMIC_DRAW  GL_STATIC_DRAW

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->EBO);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, this->indices.size() * sizeof(GLuint), &this->indices[0], GL_DYNAMIC_DRAW);
        // Set the vertex attribute pointers

        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)0);
        // Vertex Normals
        glEnableVertexAttribArray(1);
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)offsetof(Vertex, Normal));
        // Vertex Texture Coords
        glEnableVertexAttribArray(2);
        glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)offsetof(Vertex, TexCoords));

        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glBindVertexArray(0);

    }
`````

WELL THATS IT. COULD SOME ONE PLZ TELL ME WHERE THE MESS UP IS AND GIVE & SHOW ME THE PROPER DIRECTION.
and a demonstration example maybe? That would be very much appreciated.

So its pretty straight forward im having issue with 'ob2' THE 2nd instance of a class to load new models.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...