Мне тяжело бороться с файлами obj и симуляциями одежды.Сначала я создал класс обработчика файла obj, который решает типичную проблему файла obj: наличие нескольких индексов для позиции вершины, координат текстуры вершины и нормалей вершины, подобных этой f 52/49/224 57/54/224 279/270/224
.Я сделал функцию, которая сокращает несколько индексных массивов до одного индексного массива.
class VERTEX{
public:
glm::vec3 position;
glm::vec2 uv_coord;
glm::vec3 normal;
};
std::vector<VERTEX> out_vertices;
std::vector<unsigned int> out_indices;
void reorderData(){
for(int i=0;i<vertexIndices.size();i++){
VERTEX vertex;
// add -1 to each index as indices for obj files start from 1, not 0.
int vi = vertexIndices[i]-1;
int uvi = uvIndices[i]-1;
int ni = normalIndices[i]-1;
vertex.position = temp_vertices[vi];
vertex.uv_coord = temp_uvs[uvi];
vertex.normal = temp_normals[ni];
//assign new index here for the VERTEX object
int index = getVertexIndex(vertex);
//If it's a new index, it means it's a new VERTEX. Store it in out_vertices.
if(index==out_vertices.size()){
out_vertices.push_back(vertex);
}
out_indices.push_back(index);
}
}
Затем я использую out_vertices
и out_indices
, чтобы настроить VAO, VBO и EBO для рендеринга.Проблема здесь заключается в том, что в VBO есть несколько объектов VERTEX, которые имеют одинаковое значение position
.
Однако, чтобы выполнить физическое моделирование, мне нужен класс particle
, который занимается вычислениемсила, скорость, позиция для каждой петли каждой частицы ткани.
class particle{
public:
glm::vec3 position;
glm::vec3 force;
glm::vec3 speed;
float mass;
}
И если я просто скопирую значения положения VERTEX
объектов в объекты particle
, тогда будет несколько particle
объекты с одинаковым значением позиции.Но это не кажется правильным, так как для каждой уникальной позиции должен быть только один particle
объект.
Поэтому на данный момент мое решение состоит в том, чтобы сначала создать particle
объектов, каждый из которых имеет уникальные значения положения.Затем, после каждого физического цикла, вычисляющего скорость, силу, положение частицы, я обновляю все объекты VERTEX
, значение позиции которых изменилось для соответствующего объекта 'позиция'.Наконец, я обновляю VBO.
Это был бы правильный подход?Я боюсь, что линейный поиск нескольких объектов VERTEX, которые имеют то же значение position
, что и объект частицы, займет много времени.Любая помощь будет оценена.Заранее спасибо!
Короче говоря, я хочу получить совет о том, как эффективно разделять и обрабатывать данные рендеринга и данные физического моделирования.