Необработанный OpenGL-эквивалент GLUPerspective? - PullRequest
2 голосов
/ 17 июня 2010

как я могу сделать так же, как GluPerspective без Glu? Спасибо

например: gluPerspective (45,0, (с плавающей точкой) w / (с плавающей точкой) ч, 1,0, 200,0);

Ответы [ 2 ]

7 голосов
/ 17 июня 2010
void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar )
{
    GLdouble xmin, xmax, ymin, ymax;

    ymax = zNear * tan( fovy * M_PI / 360.0 );
    ymin = -ymax;
    xmin = ymin * aspect;
    xmax = ymax * aspect;

    glFrustum( xmin, xmax, ymin, ymax, zNear, zFar );
}
3 голосов
/ 17 июня 2010

Это довольно четко объяснено в документации gluPerspective.Вы просто строите соответствующую матрицу преобразования 4x4 и используете glMultMatrix, чтобы умножить ее на текущее преобразование:

void myGluPerspective(double fovy, double aspect, double zNear, double zFar)
{
    double f = 1.0 / tan(fovy * M_PI / 360);  // convert degrees to radians and divide by 2
    double xform[16] =
    {
        f / aspect, 0, 0, 0,
        0,          f, 0, 0,
        0,          0, (zFar + zNear)/(zNear - zFar), -1,
        0,          0, 2*zFar*zNear/(zNear - zFar), 0
    };
    glMultMatrixd(xform);
}

Обратите внимание, что OpenGL хранит матрицы в порядке основной столбец , поэтомупорядок элементов массива выше транспонирован из того, что написано в документации gluPerspective.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...