Скажем, у нас есть объект, и мы хотим создать несколько объектов и переместить их самостоятельно на основе некоторого алгоритма. Вот что это процесс, я использую:Чтение данных позиции из Vertex Buffer в openGL
- Создать структуру с геометрией объекта
- Создание массива Vertice буферов, используя геометрию объекта
- Теперь в процедуре рендеринга, Мне нужно пройти каждый из этих объектов и изменить их положение на основе определенного алгоритма.
- Для этого мне нужно получить текущее местоположение объекта для вычисления новой позиции.
Как получить текущее местоположение буфера вершин? Ясно, что я не хочу хранить вне программы все местоположения объекта, так как они находятся внутри буфера вершин.
EDIT: Это код, я использую для хранения и извлечения данных из модели матрицы каждого объекта
// Set up Code
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
[self loadShaders];
glEnable(GL_DEPTH_TEST);
for(int i; i<num_objects; i++) {
glGenVertexArraysOES(1, &_objectArray[i]);
glBindVertexArrayOES(_objectArray[i]);
glGenBuffers(1, &_objectBuffer[i]);
glBindBuffer(GL_ARRAY_BUFFER, _objectBuffer[i]);
glBufferData(GL_ARRAY_BUFFER, sizeof(objectData), objectData, GL_STATIC_DRAW);
glEnableVertexAttribArray(....);
glVertexAttribPointer(......, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
}
glBindVertexArrayOES(0);
}
//********************************************************
// Rendering Code
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glUseProgram(_program);
for(int i=0; i<num_objects; i++) {
glBindVertexArrayOES(_objectArray[i]);
// Get Previous data
GLint uMatrix = glGetUniformLocation(_program, "modelMatrix");
glGetUniformfv(_program, uMatrix, dataOfCurrentObject);
// Get Previous data
... transform dataOfCurrentObject based on an algorithm and create newDataOfCurrentObject
// Update object with new data and draw
glUniformMatrix4fv(uMatrix, 1, 0, newDataOfCurrentObject);
glDrawArrays(GL_TRIANGLES, 0, 36);
}
}
Проблема у меня сейчас является то, что dataOfCurrentObject для объекта «я» идентичен newDataOfCurrentObject для объекта 'i-1'. Другими словами, кажется, что код отслеживает только одну модельную матрицу для всех объектов или не корректно считывает матрицу модели конкретного объекта. Есть идеи?
Я пробовал этот метод, но я делаю это в приложении iOS, поэтому Matrix.identity() не существует. Знаете ли вы, какой вызов получит матрица модели в iOS –
@ Z.Zepos Я сказал, что это псевдокод.Вам нужно взглянуть на используемые вами API (одна из которых должна быть Math/Matrices Library) и посмотрите, как вы устанавливаете и восстанавливаете Matrices с помощью этой библиотеки. – Xirema