Как получить ключ OpenGL без указателей? - PullRequest
0 голосов
/ 08 февраля 2012

Я делаю программу на Perl с привязками OpenGL, я преодолел первый блокпост, когда вызывается glutReshapeFunc(\&changeSize);, читая переменные GLUT_WINDOW_HEIGHT и GLUT_WINDOW_WIDTH, но я понятия не имею, какполучить значение ключа, переданного при вызове glutSpecialFunc(\&processSpecialKeys);.Читая API, я не смог найти переменную GLUT_SPECIAL_KEY или что-то в этом роде.

sub changeSize
{
        my $w = glutGet(GLUT_WINDOW_WIDTH);
        my $h = glutGet(GLUT_WINDOW_HEIGHT);
        if($w eq 0){
        $w = 1;
}
        my $ratio = ($w / $h);
        # Use the Projection Matrix
        glMatrixMode(GL_PROJECTION);

            #// Reset Matrix
        glLoadIdentity();

        #// Set the viewport to be the entire window
        glViewport(0, 0, $w, $h);

        #// Set the correct perspective.
        gluPerspective(45,$ratio,1,1000);

        #// Get Back to the Modelview
        glMatrixMode(GL_MODELVIEW);
        gluLookAt( $x, 1.0, $z,
            $x+$lx,1.0,$z+$lz,
            0.0,1.0,0.0);
}

sub processSpecialKeys
{

    $fraction = 0.1;
    $key = $_[0]; #my first shot was that the key value was stored at $_[0]
                      #the mouse_x was at $_[1] and $_[2] had mouse_y
        if ($key eq GLUT_KEY_LEFT)
        {
            $angle -= 0.01;
            $lx = sin($angle);
            $lz = -cos($angle);
        }
}

1 Ответ

0 голосов
/ 08 февраля 2012

OpenGL сам по себе не работает с пользовательским вводом.Вы используете GLUT, стороннюю библиотеку.

glutReshapeFunc (\ & changeSize);вызывается чтением переменных GLUT_WINDOW_HEIGHT и GLUT_WINDOW_WIDTH,

Обычно вы не запрашиваете GLUT_WINDOW_HEIGHT и GLUT_WINDOW_WIDTH из обработчика изменения формы, поскольку оба эти значения передаются в качестве параметров функции.

ключа передано, когда glutSpecialFunc (\ & processSpecialKeys);называется.Читая API, я не смог найти переменную GLUT_SPECIAL_KEY или что-то в этом роде.

Потому что нет.Ключ и позиция щелчка передаются в качестве параметров функции обратного вызова.

...