|
114 | 114 | my @Light_Diffuse = ( 1.2, 1.2, 1.2, 1.0 );
|
115 | 115 | my @Light_Position = ( 2.0, 2.0, 0.0, 1.0 );
|
116 | 116 |
|
117 |
| -# Model/Projection/Viewport Matrices |
| 117 | +# Model/Projection/Texture/Colour Matrices, Viewport vector |
118 | 118 | my $mm = OpenGL::Array->new(16,GL_DOUBLE);
|
119 | 119 | my $pm = OpenGL::Array->new(16,GL_DOUBLE);
|
| 120 | +my $tm = OpenGL::Array->new(16,GL_DOUBLE); |
| 121 | +my $cm = OpenGL::Array->new(16,GL_DOUBLE); |
120 | 122 | my $vp = OpenGL::Array->new(4,GL_INT);
|
121 | 123 |
|
122 | 124 | # Vertex Buffer Object data
|
@@ -1325,47 +1327,47 @@ sub cbMouseClick
|
1325 | 1327 | # Example of using GLU to determine 3D click points
|
1326 | 1328 | if ($state == GLUT_UP)
|
1327 | 1329 | {
|
1328 |
| - print "\n"; |
1329 |
| - |
1330 |
| - glGetDoublev_c(GL_MODELVIEW_MATRIX,$mm->ptr()); |
1331 |
| - my @model = $mm->retrieve(0,16); |
1332 |
| - |
1333 |
| - glGetDoublev_c(GL_PROJECTION_MATRIX,$pm->ptr()); |
1334 |
| - my @projection = $pm->retrieve(0,16); |
1335 |
| - |
1336 |
| - glGetIntegerv_c(GL_VIEWPORT,$vp->ptr()); |
1337 |
| - my @viewport = $vp->retrieve(0,4); |
1338 |
| - |
1339 |
| - print "Model Matrix: $model[0], $model[1], $model[2], $model[3]\n"; |
1340 |
| - print " $model[4], $model[5], $model[6], $model[7]\n"; |
1341 |
| - print " $model[8], $model[9], $model[10], $model[11]\n"; |
1342 |
| - print " $model[12], $model[13], $model[14], $model[15]\n"; |
1343 |
| - |
1344 |
| - print "Projection Matrix: $projection[0], $projection[1], $projection[2], $projection[3]\n"; |
1345 |
| - print " $projection[4], $projection[5], $projection[6], $projection[7]\n"; |
1346 |
| - print " $projection[8], $projection[9], $projection[10], $projection[11]\n"; |
1347 |
| - print " $projection[12], $projection[13], $projection[14], $projection[15]\n"; |
1348 |
| - |
1349 |
| - print "Viewport: $viewport[0], $viewport[1], $viewport[2], $viewport[3]\n"; |
1350 |
| - print "\n"; |
1351 |
| - |
| 1330 | + my ($model, $projection, $viewport) = dumpMatrices(); |
1352 | 1331 | my @point = gluUnProject_p($x,$y,0, # Cursor point
|
1353 |
| - @model, # Model Matrix |
1354 |
| - @projection, # Projection Matrix |
1355 |
| - @viewport); # Viewport |
| 1332 | + @$model, # Model Matrix |
| 1333 | + @$projection, # Projection Matrix |
| 1334 | + @$viewport); # Viewport |
1356 | 1335 | print "Model point: $point[0], $point[1], $point[2]\n";
|
1357 |
| - |
1358 |
| -# @point = gluProject_p(@point, # Model point |
1359 |
| -# @model, # Model Matrix |
1360 |
| -# @projection, # Projection Matrix |
1361 |
| -# @viewport); # Viewport |
1362 |
| -# print "Window point: $point[0], $point[1], $point[2]\n"; |
| 1336 | +# @point = gluProject_p(@point, # Model point |
| 1337 | +# @model, # Model Matrix |
| 1338 | +# @projection, # Projection Matrix |
| 1339 | +# @viewport); # Viewport |
| 1340 | +# print "Window point: $point[0], $point[1], $point[2]\n"; |
1363 | 1341 | print "\n";
|
1364 | 1342 | }
|
1365 | 1343 |
|
1366 | 1344 | $idleTime = $hasHires ? gettimeofday() : time();
|
1367 | 1345 | }
|
1368 | 1346 |
|
| 1347 | +sub dumpMatrices |
| 1348 | +{ |
| 1349 | + print "\n"; |
| 1350 | + glGetDoublev_c(GL_MODELVIEW_MATRIX,$mm->ptr()); |
| 1351 | + my @model = $mm->retrieve(0,16); |
| 1352 | + glGetDoublev_c(GL_PROJECTION_MATRIX,$pm->ptr()); |
| 1353 | + my @projection = $pm->retrieve(0,16); |
| 1354 | + glGetDoublev_c(GL_PROJECTION_MATRIX,$tm->ptr()); |
| 1355 | + my @texture = $tm->retrieve(0,16); |
| 1356 | + glGetDoublev_c(GL_PROJECTION_MATRIX,$cm->ptr()); |
| 1357 | + my @colours = $cm->retrieve(0,16); |
| 1358 | + for (['Model',\@model], ['Projection',\@projection], ['Texture',\@texture], ['Colour',\@colours]) { |
| 1359 | + printf "%-19s$_->[1][0], $_->[1][1], $_->[1][2], $_->[1][3]\n", "$_->[0] Matrix:"; |
| 1360 | + print " $_->[1][4], $_->[1][5], $_->[1][6], $_->[1][7]\n"; |
| 1361 | + print " $_->[1][8], $_->[1][9], $_->[1][10], $_->[1][11]\n"; |
| 1362 | + print " $_->[1][12], $_->[1][13], $_->[1][14], $_->[1][15]\n"; |
| 1363 | + } |
| 1364 | + glGetIntegerv_c(GL_VIEWPORT,$vp->ptr()); |
| 1365 | + my @viewport = $vp->retrieve(0,4); |
| 1366 | + print "Viewport: $viewport[0], $viewport[1], $viewport[2], $viewport[3]\n"; |
| 1367 | + print "\n"; |
| 1368 | + (\@model, \@projection, \@viewport); |
| 1369 | +} |
| 1370 | + |
1369 | 1371 | sub GetKeyModifier
|
1370 | 1372 | {
|
1371 | 1373 | return $key_mods->{glutGetModifiers()};
|
|
0 commit comments