Change parser to do C style () for operators: 1+2*3 == 1+(2)*3
[io/jrb1.git] / addons / OpenGL / docs / tutorial / lesson5 / main.io
blob4ae7ec017c851ce97d71080a803724aab77e9ee6
1 // NeHe Tutorial #5
2 // See original source and C based tutorial at:
3 // http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=05
4 //
5 // Ported to Io by Steve Dekorte 2003
6 // 2004-08-01 Updated by Doc O'Leary
8 Demo := Object clone
9 Demo appendProto(OpenGL)
11 Demo rtri := 0
12 Demo rquad := 0
14 Demo reshape := method(w, h,
15 glViewport(0, 0, w, h)
16 glMatrixMode(GL_PROJECTION)
17 glLoadIdentity
18 gluPerspective(45.0, w / h, 0.1, 100.0)
19 glMatrixMode(GL_MODELVIEW)
20 glLoadIdentity
23 Demo InitGL := method(
24 glShadeModel(GL_SMOOTH)
25 glClearColor(0, 0, 0, 0)
26 glClearDepth(1)
27 glEnable(GL_DEPTH_TEST)
28 glDepthFunc(GL_LEQUAL)
30 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
33 // Finally, some real 3D shapes.
34 Demo display := method(
35 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
36 glLoadIdentity
37 glTranslated(-1.5, 0.0, -6.0)
39 glRotated(rtri, 0, 1, 0) // Rotate The Pyramid On It's Y Axis
40 glBegin(GL_TRIANGLES) // Start Drawing The Pyramid
42 glColor3d(1, 0, 0) // Red
43 glVertex3d(0, 1, 0) // Top Of Triangle (Front)
44 glColor3d(0, 1, 0) // Green
45 glVertex3d(-1, -1, 1) // Left Of Triangle (Front)
46 glColor3d(0, 0, 1) // Blue
47 glVertex3d(1, -1, 1) // Right Of Triangle (Front)
49 glColor3d(1, 0, 0) // Red
50 glVertex3d(0, 1, 0) // Top Of Triangle (Right)
51 glColor3d(0, 0, 1) // Blue
52 glVertex3d(1, -1, 1) // Left Of Triangle (Right)
53 glColor3d(0, 1, 0) // Green
54 glVertex3d(1, -1, -1) // Right Of Triangle (Right)
56 glColor3d(1, 0, 0) // Red
57 glVertex3d(0, 1, 0) // Top Of Triangle (Back)
58 glColor3d(0, 1, 0) // Green
59 glVertex3d(1, -1, -1) // Left Of Triangle (Back)
60 glColor3d(0, 0, 1) // Blue
61 glVertex3d(-1, -1, -1) // Right Of Triangle (Back)
63 glColor3d(1, 0, 0) // Red
64 glVertex3d(0, 1, 0) // Top Of Triangle (Left)
65 glColor3d(0, 0, 1) // Blue
66 glVertex3d(-1, -1, -1) // Left Of Triangle (Left)
67 glColor3d(0, 1, 0) // Green
68 glVertex3d(-1, -1, 1) // Right Of Triangle (Left)
69 glEnd
72 glLoadIdentity
73 glTranslated(1.5, 0, -7) // Move Right And Into The Screen
75 glRotated(rquad, 1, 1, 1) // Rotate The Cube On X, Y & Z
76 glBegin(GL_QUADS) // Start Drawing The Cube
78 glColor3d(0, 1, 0) // Set The Color To Green
79 glVertex3d( 1, 1,-1) // Top Right Of The Quad (Top)
80 glVertex3d(-1, 1,-1) // Top Left Of The Quad (Top)
81 glVertex3d(-1, 1, 1) // Bottom Left Of The Quad (Top)
82 glVertex3d( 1, 1, 1) // Bottom Right Of The Quad (Top)
84 glColor3d(1, 0.5, 0) // Set The Color To Orange
85 glVertex3d( 1,-1, 1) // Top Right Of The Quad (Bottom)
86 glVertex3d(-1,-1, 1) // Top Left Of The Quad (Bottom)
87 glVertex3d(-1,-1,-1) // Bottom Left Of The Quad (Bottom)
88 glVertex3d( 1,-1,-1) // Bottom Right Of The Quad (Bottom)
90 glColor3d(1, 0, 0) // Set The Color To Red
91 glVertex3d( 1, 1, 1) // Top Right Of The Quad (Front)
92 glVertex3d(-1, 1, 1) // Top Left Of The Quad (Front)
93 glVertex3d(-1,-1, 1) // Bottom Left Of The Quad (Front)
94 glVertex3d( 1,-1, 1) // Bottom Right Of The Quad (Front)
96 glColor3d(1, 1, 0) // Set The Color To Yellow
97 glVertex3d( 1,-1,-1) // Bottom Left Of The Quad (Back)
98 glVertex3d(-1,-1,-1) // Bottom Right Of The Quad (Back)
99 glVertex3d(-1, 1,-1) // Top Right Of The Quad (Back)
100 glVertex3d( 1, 1,-1) // Top Left Of The Quad (Back)
102 glColor3d(0, 0, 1) // Set The Color To Blue
103 glVertex3d(-1, 1, 1) // Top Right Of The Quad (Left)
104 glVertex3d(-1, 1,-1) // Top Left Of The Quad (Left)
105 glVertex3d(-1,-1,-1) // Bottom Left Of The Quad (Left)
106 glVertex3d(-1,-1, 1) // Bottom Right Of The Quad (Left)
108 glColor3d(1, 0, 1) // Set The Color To Violet
109 glVertex3d( 1, 1,-1) // Top Right Of The Quad (Right)
110 glVertex3d( 1, 1, 1) // Top Left Of The Quad (Right)
111 glVertex3d( 1,-1, 1) // Bottom Left Of The Quad (Right)
112 glVertex3d( 1,-1,-1) // Bottom Right Of The Quad (Right)
113 glEnd // Done Drawing The Quad
115 rtri = rtri + .2
116 rquad = rquad - .15
118 glutSwapBuffers
121 Demo timer := method(v,
122 self display
123 glutTimerFunc(10, v)
126 Demo main := method(
127 glutInit
128 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
129 glutInitWindowSize(640, 480)
130 glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99")
131 glutEventTarget(self)
133 self InitGL
135 glutDisplayFunc
136 glutReshapeFunc
137 glutTimerFunc(10, 0)
139 glutMainLoop
142 Demo main