假设我们有一个对象,并且我们想要创建多个对象并基于某种算法独立地移动它们。 这里是什么,是我使用的过程:从openGL中的顶点缓冲区读取位置数据
- 与对象
- 创建使用对象
- 现在在渲染程序的几何顶点缓存阵列的几何创建一个结构,我需要浏览这些对象中的每一个,并根据特定的算法改变它们的位置。
- 为了实现这个目标,我需要获取对象的当前位置来计算新的位置。
如何获得vertice缓冲区的当前位置?显然,我不想在程序外部存储对象的所有位置,因为它们位于顶点缓冲区内。
编辑:这是我使用存储和检索从每个对象的模型矩阵数据的代码
// 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对象“i”是等同于对象'i-1'的newDataOfCurrentObject。换句话说,代码似乎只跟踪所有对象的一个模型矩阵,或者它没有正确读取特定对象的模型矩阵。有任何想法吗?
我已经尝试过这种方法,但我在iOS应用程序上这样做,所以Matrix.identity()不存在。你知道什么样的调用会得到iOS –
@ Z.Zepos中的模型矩阵我说它是伪代码。您需要查看您正在使用的API(其中一个应该是Math/Matrices Library),并查看如何使用该库设置和重置矩阵。 – Xirema