Я хочу использовать методы фиксированной функции, такие как glTranslate (), glRotate (), glScale () в моем приложении openGL 2.0. Я знаю, что мне нужно реализовать матричный класс - и сделал это. Мой вопрос сейчас об эффективности. Чтобы иметь возможность использовать что-то вроде:
glLoadIdentity();
glRotatef(2.0f, 0.0f, 0.0f, 1.0f);
glScalef(2.0f, 2.0f, 2.0f);
Я думаю, мне нужно сделать как минимум 3 умножения матриц (при условии, что у нас есть проекция, и представление модели соответствует, и это для просмотра модели).
Первым будет: Identity-Matrix * Rotation-Matrix - Вторым будет: ActualMatrix * ScaleMatrix, а последним будет: projectionMatrix * ActualMatrix (и этот Im передается как единое значение моему шейдеру).
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEW_PROJECTION_MATRIX], 1, GL_FALSE, matrix->getProjectionModelviewMatrix());
Итак, мой Вершинный шейдер выглядит так:
attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
colorVarying = color;
}
Это делается так же в OpenGL ES 1.1? Кажется, мне нужно одно умножение матриц для каждого: glRotate, glScale, glTranslate ... Вызов - это мне кажется очень большим. Или есть лучший способ? (может с меньшим умножением матриц?)
Любая помощь по этой теме будет принята с благодарностью! Спасибо за чтение