【问题标题】:How do i get the OpenGL key without pointers?如何在没有指针的情况下获取 OpenGL 键?
【发布时间】:2012-02-07 20:29:59
【问题描述】:

我正在使用 OpenGL 绑定在 Perl 中编写一个程序,当通过读取 GLUT_WINDOW_HEIGHTGLUT_WINDOW_WIDTH 变量调用 glutReshapeFunc(\&changeSize); 时,我已经克服了第一个障碍,但我不知道如何获取调用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);
        }
}

【问题讨论】:

    标签: perl opengl binding glut


    【解决方案1】:

    OpenGL 本身不处理用户输入。您使用的是 GLUT,一个 3rd 方库。

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

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

    glutSpecialFunc(\&processSpecialKeys); 时传递的密钥叫做。阅读 API 我找不到 GLUT_SPECIAL_KEY 变量或类似的东西。

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

    【讨论】:

    • 是的,这是我的问题,我找不到读取这些回调参数的方法
    • @alfa64:您能否提供您的源代码,以便我看到您到目前为止尝试过的内容?
    • @alfa64:这看起来不错。但是我在您的输入处理程序中看不到 glutPostRedisplay,这会触发实际的重绘。顺便说一句:调整大小处理程序的全部内容应该放在绘图函数中。从长远来看,这将使您的生活更轻松。
    • @alfa64:是的。尽管不鼓励以这种方式访问​​函数参数。通常你会转移它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2013-03-13
    • 1970-01-01
    • 2011-11-26
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多