Commit | Line | Data |
8fde61e3 |
1 | #!/usr/bin/perl -w |
2 | # This code was created by Jeff Molofee '99 |
3 | # (ported to SDL by Sam Lantinga '2000) |
4 | # (ported to Perl/SDL by Wayne Keenan '2000) |
5 | # |
6 | # If you've found this code useful, please let me know. |
7 | # |
8 | # Visit me at www.demonews.com/hosted/nehe |
9 | |
10 | use strict; |
11 | use Getopt::Long; |
12 | |
13 | use SDL; |
14 | use SDL::App; |
15 | use SDL::OpenGL; |
16 | use SDL::Event; |
17 | |
18 | my $arg_screen_width =640; |
19 | my $arg_screen_height=512; |
20 | my $arg_fullscreen=0; |
21 | |
22 | GetOptions( |
23 | "width:i" => \$arg_screen_width, |
24 | "height:i" => \$arg_screen_height, |
25 | "fullscreen!" => \$arg_fullscreen, |
26 | ) or die $!; |
27 | |
28 | main(); |
29 | exit; |
30 | |
31 | |
32 | sub main |
33 | { |
34 | my $done=0; |
35 | |
36 | my $app = new SDL::App ( -title => "Jeff Molofee's GL Code Tutorial ... NeHe '99", |
37 | -icon => "icon.png", |
38 | -width => $arg_screen_width, |
39 | -height =>$arg_screen_height, |
40 | -d => 16, |
41 | -opengl => 1, |
42 | ); |
43 | $app->fullscreen() if $arg_fullscreen; |
44 | |
45 | SDL::ShowCursor(0); |
46 | |
47 | my $event = new SDL::Event; |
48 | $event->set(SDL_SYSWMEVENT,SDL_IGNORE);# |
49 | |
50 | |
51 | |
52 | InitGL($arg_screen_width, $arg_screen_height); |
53 | |
54 | while ( ! $done ) { |
55 | |
56 | DrawGLScene(); |
57 | |
58 | $app->sync(); |
59 | |
60 | $event->pump; |
61 | $event->poll; |
62 | |
63 | |
64 | if ( $event->type == SDL_QUIT ) { |
65 | $done = 1; |
66 | } |
67 | |
68 | if ( $event->type == SDL_KEYDOWN ) { |
69 | if ( $event->key_sym == SDLK_ESCAPE ) { |
70 | $done = 1; |
71 | } |
72 | } |
73 | } |
74 | } |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | ######################################################################### |
82 | #Pretty much in original form, but 'Perlised' |
83 | |
84 | |
85 | sub InitGL |
86 | { |
87 | my ($Width, $Height)=@_; |
88 | |
89 | glViewport(0, 0, $Width, $Height); |
90 | glClearColor(0.0, 0.0, 0.0, 0.0); # This Will Clear The Background Color To Black |
91 | glClearDepth(1.0); # Enables Clearing Of The Depth Buffer |
92 | glDepthFunc(GL_LESS); # The Type Of Depth Test To Do |
93 | glEnable(GL_DEPTH_TEST); # Enables Depth Testing |
94 | glShadeModel(GL_SMOOTH); # Enables Smooth Color Shading |
95 | |
96 | glMatrixMode(GL_PROJECTION); |
97 | glLoadIdentity(); # Reset The Projection Matrix |
98 | |
99 | gluPerspective(45.0, $Width/$Height, 0.1, 100.0); # Calculate The Aspect Ratio Of The Window |
100 | |
101 | glMatrixMode(GL_MODELVIEW); |
102 | } |
103 | |
104 | |
105 | |
106 | # The main drawing function. |
107 | sub DrawGLScene |
108 | { |
109 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # Clear The Screen And The Depth Buffer |
110 | glLoadIdentity(); # Reset The View |
111 | |
112 | glTranslate(-1.5,0.0,-6.0); # Move Left 1.5 Units And Into The Screen 6.0 |
113 | |
114 | # draw a triangle (in smooth coloring mode) |
115 | glBegin(GL_POLYGON); # start drawing a polygon |
116 | glColor(1.0,0.0,0.0); # Set The Color To Red |
117 | glVertex( 0.0, 1.0, 0.0); # Top |
118 | glColor(0.0,1.0,0.0); # Set The Color To Green |
119 | glVertex( 1.0,-1.0, 0.0); # Bottom Right |
120 | glColor(0.0,0.0,1.0); # Set The Color To Blue |
121 | glVertex(-1.0,-1.0, 0.0); # Bottom Left |
122 | glEnd(); # we're done with the polygon (smooth color interpolation) |
123 | |
124 | glTranslate(3.0,0.0,0.0); # Move Right 3 Units |
125 | |
126 | # draw a square (quadrilateral) |
127 | glColor(0.5,0.5,1.0); # set color to a blue shade. |
128 | glBegin(GL_QUADS); # start drawing a polygon (4 sided) |
129 | glVertex(-1.0, 1.0, 0.0); # Top Left |
130 | glVertex( 1.0, 1.0, 0.0); # Top Right |
131 | glVertex( 1.0,-1.0, 0.0); # Bottom Right |
132 | glVertex(-1.0,-1.0, 0.0); # Bottom Left |
133 | glEnd(); # done with the polygon |
134 | |
135 | |
136 | |
137 | |
138 | } |
139 | |
140 | |
141 | |
142 | |