【发布时间】:2016-06-02 01:00:52
【问题描述】:
假设我们有一个对象,我们想要创建多个对象并根据某种算法独立移动它们。 这是我正在使用的过程:
- 使用对象的几何形状创建结构
- 使用对象的几何形状创建一个顶点缓冲区数组
- 现在在渲染例程中,我需要遍历这些对象中的每一个,并根据特定算法更改它们的位置。
- 为此,我需要获取对象的当前位置来计算新位置。
如何获取顶点缓冲区的当前位置?显然,我不想将对象的所有位置都存储在程序之外,因为它们都在顶点缓冲区内。
编辑:这是我用来从每个对象的模型矩阵中存储和检索数据的代码
// 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);
}
}
我现在遇到的问题是对象“i”的 dataOfCurrentObject 与对象“i-1”的 newDataOfCurrentObject 相同。换句话说,代码似乎只跟踪所有对象的一个模型矩阵,或者它没有正确读取特定对象的模型矩阵。有什么想法吗?
【问题讨论】:
标签: ios opengl-es opengl-es-2.0