Я сам должен был сделать то же самое в приложении OpenGL ES, которое я описываю в статье об этом здесь .Исходный грубый подход считал матрицу представления текущей модели и манипулировал ею для получения желаемого эффекта:
GLfloat currentModelViewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(xRotation, currentModelViewMatrix[1], currentModelViewMatrix[5], currentModelViewMatrix[9]);
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(yRotation, currentModelViewMatrix[0], currentModelViewMatrix[4], currentModelViewMatrix[8]);
Это будет работать, но имейте в виду, что два вызова glGetFloatv()
замедляют рендеринг, останавливая конвейер,С тех пор я заменил этот код вычислениями, которые я выполняю на собственной внутренней копии матрицы представления модели, а затем просто пишу матрицу представления модели с внутренним управлением после каждого поворота.Это устраняет необходимость выполнять дорогостоящие операции чтения матрицы.