Я делаю программу на 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);
}
}