What’s the plan for today? Go over our framework code. Learn some basic OpenGL! Reveal Lab 1 Answer questions Framework Environment C/C++ and OpenGL Code will be given with Makefiles You can compile in Linux, Mac, and Windows! You must use the framework What should you know? At the very least You’ve programmed before You know the programming cycle Better for you if You are familiar with C/C++ Amazing if You already know OpenGL Have a degree in Computer Science Framework Where do I get it?! Resources in Class Website This lab’s framework provides you with An initial OpenGL window Callback functions you will need What is OpenGL? A powerful, open source graphics library Widely used in both industry and academia Capable of rendering 3D geometries with a plethora of effects Keeps a “global” state Transformation, projection matrices Attributes from primitives Exercise: Compiling Compile the framework Change window size, position, and title Exercise: Drawing Things! Since you guys are now pros, let’s draw things! Every GL primitive starts with glBegin(…), and ends with glEnd () Example: glBegin (GL_POINT); glVertex3f( 1.0,1.0,1.0); glEnd() Exercise: Drawing Quads Find the DrawGLScene() function After glLoadIdentity(), create a GL primitive using GL_QUADS Exercise: Drawing Quads Add this code And this code… What just happened?! OK, that’s weird, why is the screen yellow? We’ve basically rendered our object too close for us to really see it. So, we need to move (or translate) it further back. Translation and Rotation Rotation (unsurprisingly) rotates the primitive, BUT rotates it around the “world” axis, NOT its local axis Hint: You can think of the camera as always being at the world origin(0,0,0) Translation “moves” the primitive around to a different location The order you do translations and rotations in MATTERS Translation and Rotation Rotate Translate Translation and Rotation Rotate then Translate Translate then Rotate Translation and Rotation WARNING!!! OpenGL will perform translations and rotations IN THE OPPOSITE ORDER YOU WRITE THEM IN CODE i.e. writing the following in code: … glTranslate(...) glRotate(…) … Will rotate then translate the primitive Translation and Rotation Important things to keep in mind: Translate/Rotate operates relative to the world origin The order of translations and rotations matters OpenGL will perform translations and rotations in the OPPOSITE order you list them in code Exercise: Finish the cube Add this line of code above your primitive in your drawing function. Finish the rest of the cube. Change the color of each side to something else! glColor3f( red, green, blue ); Callbacks GLUT allows us to interface between events (such as clicking, keyboard input, etc.) and OpenGL. Lab 1 Implement a camera to move around in OpenGL. Use the callback functions provided for you. Use the cube as a way to debug your camera. Make sure you at least create a vector, camera, and framework class. Questions? Useful sites OpenGL Reference Pages: http://www.opengl.org/sdk/docs/man/ (what we use) http://www.opengl.org/sdk/docs/man4/ (latest ver.) NeHe Tutorials (under Legacy Tutorials): http://nehe.gamedev.net/ Note: As of Aug. 2011, the current tutorials are a little out-of-date/deprecated, but in the process of being updated. They still give a good explanation of the basics, but don’t expect to be able to run the code.