, который хочет перемещать объекты в сцене с матричным переводом, но не может заставить что-либо заклеить. Я могу заставить проекцию двигаться, но я не могу получить квадрат 2d для перемещения.iphone openGL ES 2 перевод объекта
Рендер код в классе спрайтов:
glGenBuffers(1, &self->_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, self.vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(self.shader.positionSlot);
glVertexAttribPointer(self.shader.positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glEnableVertexAttribArray(self.shader.colorSlot);
glVertexAttribPointer(self.shader.colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *)(sizeof(float) * 3));
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
float matrix[16]; // trying to manipulate matrix here
matrixSetIdentity(matrix);
float translateMatrix[16];
matrixSetTranslation(translateMatrix, 0, 0, 0);
float result[16];
matrixMultiply(matrix, translateMatrix, result);
glUniformMatrix4fv(self.shader.positionSlot, 1, 0, result); //this doesn't work, the object disappears?
glDrawArrays(GL_TRIANGLES, 0, sizeof(Vertices)/sizeof(Vertices[0]));
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
Heres код шейдера:
attribute vec4 Position;
attribute vec4 SourceColor;
varying vec4 DestinationColor;
uniform mat4 Projection;
uniform mat4 Modelview;
void main(void) {
DestinationColor = SourceColor;
gl_Position = Projection * Modelview * Position;
}
Теперь разочарование части является то, что это работает:
float h = 4.0f * self.frame.size.height/self.frame.size.width;
float projection[16];
[self.matrix projection:projection Left:-2 Right:2 Top:h/2 Bottom:-h/2 near:4 far:20];
glUniformMatrix4fv(self.shader.projectionUniform, 1, 0, projection);
float modelView[16];
matrixSetTranslation(modelView, 0.0, sin(CACurrentMediaTime()), -10.0);
glUniformMatrix4fv(self.shader.modelViewUniform, 1, 0, modelView);
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
не знаю, почему верхняя код, похоже, не работает, но нижний. Любые комментарии приветствуются.
Очень сложно сказать, какая часть верхнего кода соответствует нижнему коду. –
его общие функции для перевода и идентификации, только вершина находится в классе спрайтов, а нижняя часть - в классе сцены. Дайте мне знать, есть ли что-то, что вам нужно увидеть? – Matt