如何在没有指针的情况下获得OpenGL密钥?

时间:2012-02-07 20:30:00

标签: perl opengl binding glut

我正在使用OpenGL绑定在Perl中执行一个程序,通过阅读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 :(得分:0)

OpenGL本身并不处理用户输入。您使用的是GLUT,第三方库。

  

glutReshapeFunc(\&安培; changeSize);通过读取GLUT_WINDOW_HEIGHT和GLUT_WINDOW_WIDTH变量来调用,

您通常不会从重塑处理程序中查询GLUT_WINDOW_HEIGHT和GLUT_WINDOW_WIDTH,因为这两个值都作为参数传递给函数。

  当glutSpecialFunc(\& processSpecialKeys)时传递的密钥

;叫做。阅读API我无法找到GLUT_SPECIAL_KEY变量或类似的东西。

因为没有。 click的键和位置作为参数传递给回调函数。