Я работаю над созданием симуляции одежды в openGL и пытаюсь использовать VAO и VBO для рендеринга, а не старого немедленного режима (glBegin, glEnd).
Я считаю, что будет лучше, если я предоставлю только соответствующие части кода, а не все. Поэтому у меня есть класс Cloth, который хранит массу (узлы) в векторе.
class Cloth {
private:
std::vector<Mass>masses;
public:
std::vector<Mass> getMasses() { return masses; };
// functions below
А класс, масс.
class Mass {
glm::vec3 currentPos;
glm::vec3 oldPos;
glm::vec3 acceleration;
// functions below
Я создал VBO примерно так
glGenBuffers(1, &VBO_ID);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
glBufferData(GL_ARRAY_BUFFER, cloth.getMasses().size() * sizeof(Mass), &cloth.getMasses().front(), GL_DYNAMIC_DRAW);
и ВАО
glGenVertexArrays(1, &VAO_ID);
glBindVertexArray(VAO_ID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GL_FLOAT), 3*sizeof(GL_FLOAT)); // unsure about this part
Из того, что я собрал, вызывая glVertexAttribPointer, вы говорите VBO, как обрабатывать данные, которые ему были переданы. Я дал ему вектор типа Масса.
Что бы я сказал, как правильно обрабатывать данные, чтобы он использовал currentPos в качестве вершин?
и
Есть ли лучший (с точки зрения производительности) способ сделать это, и если да, то как и почему?
Например, было бы лучше использовать структуру для хранения currentPos?