#!/usr/bin/env perl # # Bezier Curve example # use SDL; use SDL::App; use SDL::Surface; use SDL::Event; use SDL::OpenGL; my $app = new SDL::App -w => 800, -h => 600, -d => 16, -gl => 1; my @points = ( [-4.0, -4.0, 0.0 ], [-2.0, 4.0, 0.0 ], [ 2.0, -4.0, 0.0 ], [ 4.0, 4.0, 0.0 ] ); my $ctrlpoints = pack "d12", map { @$_ } @points; sub init { glViewport(0,0,800,600); glMatrixMode(GL_PROJECTION()); glLoadIdentity(); glFrustum (-0.1,0.1,-0.075,0.075,0.3,100.0 ); glMatrixMode(GL_MODELVIEW()); glLoadIdentity(); glTranslate(0,0,-30); glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT()); glMap1(GL_MAP1_VERTEX_3(), 0.0, 1.0, 3, 4, $ctrlpoints); glEnable(GL_MAP1_VERTEX_3()); } sub display { glClear(GL_COLOR_BUFFER_BIT); glColor(1.0,1.0,1.0); glBegin(GL_LINE_STRIP); for my $i ( 0 .. 30 ) { glEvalCoord1($i/30); } glEnd(); glPointSize(5); glColor(1.0,1.0,0); glBegin(GL_POINTS); for my $i ( 0 .. 3 ) { glVertex( @{$points[$i]} ); } glEnd(); $app->sync(); } init(); display(); $app->loop({ SDL_QUIT() => sub { exit(); } });