Advertisement
robn

perl opengl test

Aug 14th, 2012
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.36 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use 5.016;
  4. use warnings;
  5. use strict;
  6.  
  7. use SDL;
  8. use SDL::Video;
  9. use SDL::Event;
  10. use SDL::Events;
  11. use OpenGL;
  12. use Math::Trig;
  13.  
  14. my $WIDTH = 1440;
  15. my $HEIGHT = 900;
  16. my $FOV = 80;
  17.  
  18. SDL::init(SDL_INIT_VIDEO);
  19.  
  20. SDL::Video::set_video_mode($WIDTH, $HEIGHT, 32, SDL_OPENGL);
  21.  
  22. glShadeModel(GL_SMOOTH);
  23. glCullFace(GL_BACK);
  24. glFrontFace(GL_CCW);
  25. glEnable(GL_CULL_FACE);
  26. glEnable(GL_DEPTH_TEST);
  27. glDepthFunc(GL_LESS);
  28. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
  29. glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
  30.  
  31. {
  32.     my $fov = tan(deg2rad($FOV/2));
  33.     my $near = 1;
  34.     my $far = 100;
  35.     my $left = $fov * $near;
  36.     my $top = $left * $HEIGHT/$WIDTH;
  37.  
  38.     glMatrixMode(GL_PROJECTION);
  39.     glLoadIdentity();
  40.     glFrustum(-$left, $left, -$top, $top, $near, $far);
  41.  
  42.     glMatrixMode(GL_MODELVIEW);
  43.     glLoadIdentity();
  44. }
  45.  
  46. my $o = 0.01;
  47.  
  48. my $left = -20;
  49. my $right = 20;
  50. my $front = -30;
  51. my $back = -100;
  52. my $depth = 10;
  53. my $centre = 10;
  54.  
  55. my $c = 0;
  56.  
  57. my $e = SDL::Event->new;
  58. while (!SDL::Events::poll_event($e) || $e->type != SDL_KEYDOWN || $e->key_sym != SDLK_ESCAPE) {
  59.  
  60.     glClearColor(0.0, 0.0, 0.0, 1.0);
  61.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  62.  
  63.     glBegin(GL_QUADS);
  64.  
  65.         for (my $n = 0; $n < 1; $n += $o) {
  66.             my $k = $c+$n;
  67.  
  68.             my $ky1 = cos(2*pi*$k);
  69.             my $ky2 = cos(2*pi*($k+$o));
  70.  
  71.             my $x1 = $left + $n*($right-$left);
  72.             my $x2 = $x1 + $o*($right-$left);
  73.  
  74.             for (my $m = 0; $m < 1; $m += $o) {
  75.                 my $j = $c+$m;
  76.  
  77.                 my $jy1 = sin(2*pi*$j);
  78.                 my $jy2 = sin(2*pi*($j+$o));
  79.  
  80.                 my $z1 = $front + $m*($back-$front);
  81.                 my $z2 = $z1 + $o*($back-$front);
  82.  
  83.                 my $front_y1 = $ky1 * $jy1 * $depth - $centre;
  84.                 my $front_y2 = $ky2 * $jy1 * $depth - $centre;
  85.                 my $back_y1 = $ky1 * $jy2 * $depth - $centre;
  86.                 my $back_y2 = $ky2 * $jy2 * $depth - $centre;
  87.  
  88.                 glColor3f($n, $m, 1);
  89.  
  90.                 glVertex3f($x2, $front_y2, $z1);
  91.                 glVertex3f($x2, $back_y2, $z2);
  92.                 glVertex3f($x1, $back_y1, $z2);
  93.                 glVertex3f($x1, $front_y1, $z1);
  94.             }
  95.         }
  96.  
  97.     glEnd();
  98.  
  99.     $c += $o;
  100.     $c -= 1 if $c > 1;
  101.    
  102.     SDL::Video::GL_swap_buffers
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement