Новое в линейной алгебре и OpenGL.Если у вас есть матрица преобразований, как вы их рисуете, используя openGL? - PullRequest
1 голос
/ 29 февраля 2012

Я смотрел на примеры того, как можно представлять преобразования, используя матрицу вместо встроенных функций. Я хочу узнать больше о низкоуровневых функциях БЕЗ использования любой матрицы opengl или функций преобразования

Скажем, у меня есть класс матрицы: Матрица классов { общественности: данные с плавающей точкой [3] [3];

Matrix ( void )
{
    int i, j;

    for ( i = 0; i < 3; i++ )
    {
        for ( j = 0; j < 3; j++ )
        {
            data [ i ] [ j ] = 0;
        }sa
    }
}
};

Пример функции:

Matrix scale ( Pt p, float alpha )
{
    Matrix rvalue;


        rvalue.data[0][0] = alpha;
        rvalue.data[0][1] = 0;
        rvalue.data[0][2] = (1-alpha)*p.x;

        rvalue.data[1][0] = 0;
        rvalue.data[1][1] = alpha;
        rvalue.data[1][2] = (1-alpha)*p.y;


        rvalue.data[2][0] = 0;
        rvalue.data[2][1] = 0;
        rvalue.data[2][2] = 1;


    return rvalue;
}

Как бы я применил эти преобразования, используя opengl? Я не с того, с чего начать. Есть ли функция, которая может взять матрицу 3х3 и загрузить ее?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Вы, вероятно, хотите один из glLoadMatrix или glMultMatrix.Они используют матрицы столбцов 4x4, так что вы захотите написать шим как:

GLfloat matrix[16];

matrix[0] = data[0][0];
matrix[1] = data[0][1];
matrix[2] = data[0][2];
matrix[3] = 0.0f;

matrix[4] = data[1][0];
matrix[5] = data[1][1];
matrix[6] = data[1][2];
matrix[7] = 0.0f;

matrix[8] = data[2][0];
matrix[9] = data[2][1];
matrix[10] = data[2][2];
matrix[11] = 0.0f;

matrix[12] = 0.0f;
matrix[13] = 0.0f;
matrix[14] = 0.0f;
matrix[15] = 1.0f;

glLoadMatrixf(matrix);

Так что я только что дополнил ваши данные соответствующими частями идентификационной матрицы.

1 голос
/ 29 февраля 2012

Вы имеете в виду glLoadMatrix?

Действительно, я думаю, вы могли бы угадать это имя.


Теперь эта функция устарела в OpenGL3+.Вместо этого вы бы использовали glUniformMatrix3fv, чтобы загрузить преобразование в униформу, где вы можете извлечь его в свой шейдер и применить его, используя матричное умножение.

...