Computer Graphics 1 Computer Graphics 1

Similar documents
ERKELEY DAVIS IRVINE LOS ANGELES RIVERSIDE SAN DIEGO SAN FRANCISCO EECS 104. Fundamentals of Computer Graphics. OpenGL

Introduction to Computer Graphics with OpenGL/GLUT

Lecture 4 of 41. Lab 1a: OpenGL Basics

RECITATION - 1. Ceng477 Fall

Computer Graphics. Bing-Yu Chen National Taiwan University

Exercise 1 Introduction to OpenGL

CS 4204 Computer Graphics

VR-programming tools (procedural) More VRML later in this course! (declarative)

Lecture 2 2D transformations Introduction to OpenGL

CS Computer Graphics: OpenGL, Continued

CS Computer Graphics: OpenGL, Continued

OpenGL refresher. Advanced Computer Graphics 2012

CS 4731 Lecture 3: Introduction to OpenGL and GLUT: Part II. Emmanuel Agu

Information Coding / Computer Graphics, ISY, LiTH. OpenGL! ! where it fits!! what it contains!! how you work with it 11(40)

Computer Graphics. OpenGL

Computer Graphics. Making Pictures. Computer Graphics CSC470 1

Lecture 3 Advanced Computer Graphics (CS & SE )

Introduction to OpenGL. CSCI 4229/5229 Computer Graphics Fall 2012

GL_COLOR_BUFFER_BIT, GL_PROJECTION, GL_MODELVIEW

Drawing Primitives. OpenGL basics

GLUT. What is OpenGL? Introduction to OpenGL and GLUT

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

Programming using OpenGL: A first Introduction

Lecture 2 CISC440/640 Spring Department of Computer and Information Science

Computer graphics MN1

COMP 371/4 Computer Graphics Week 1

Image Processing. Geometry Processing. Reading: (Not really covered in our text. See Sects 18.1, 18.2.) Overview: Display

CS 543 Lecture 1 (Part 3) Prof Emmanuel Agu. Computer Science Dept. Worcester Polytechnic Institute (WPI)

COMPUTER GRAPHICS LAB # 3

CS559: Computer Graphics. Lecture 12: OpenGL Li Zhang Spring 2008

Rendering. Part 1 An introduction to OpenGL

Computer Graphics Course 2005

2. OpenGL -I. 2.1 What is OpenGL? Things OpenGL can do: -23-

An Interactive Introduction to OpenGL Programming

Today s Agenda. Basic design of a graphics system. Introduction to OpenGL

Computer Graphics Introduction to OpenGL

CSE 167: Introduction to Computer Graphics Lecture #5: Visibility, OpenGL

Computer Graphics, Chapt 08

Teacher Assistant : Tamir Grossinger Reception hours: by - Building 37 / office -102 Assignments: 4 programing using

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

Introduction to OpenGL Week 1

Objectives. Image Formation Revisited. Physical Approaches. The Programmer s Interface. Practical Approach. Introduction to OpenGL Week 1

OpenGL. Jimmy Johansson Norrköping Visualization and Interaction Studio Linköping University

Computer Graphics Primitive Attributes

Basic Graphics Programming

To Do. Computer Graphics (Fall 2008) Course Outline. Course Outline. Methodology for Lecture. Demo: Surreal (HW 3)

Basic Graphics Programming

Lectures OpenGL Introduction

Precept 2 Aleksey Boyko February 18, 2011

OpenGL/GLUT Intro. Week 1, Fri Jan 12

11/1/13. Basic Graphics Programming. Teaching Assistant. What is OpenGL. Course Producer. Where is OpenGL used. Graphics library (API)

OpenGL. Toolkits.

Computer Graphics Anatomy of GUI. Computer Graphics CSC470 1

CS Computer Graphics: Intro to OpenGL

CS Computer Graphics: Intro to OpenGL

Computer Graphics (Basic OpenGL)

void drawdot(glint x, GLint y) { glbegin(gl_points); glvertex2i(x,y); glend();

Graphics Programming

// double buffering and RGB glutinitdisplaymode(glut_double GLUT_RGBA); // your own initializations

Computer Graphics (CS 4731) OpenGL/GLUT(Part 1)

CS 543 Lecture 1 (Part II): Intro to OpenGL and GLUT (Part I) Emmanuel Agu

Programming with OpenGL Part 2: Complete Programs Computer Graphics I, Fall

Assignment 1. Simple Graphics program using OpenGL

API for creating a display window and using keyboard/mouse interations. See RayWindow.cpp to see how these are used for Assignment3

OpenGL Primitives. Examples: Lines. Points. Polylines. void drawdot(glint x, GLint y) { glbegin(gl_points); glvertex2i(x,y); glend(); }

Abel J. P. Gomes LAB. 1. INTRODUCTION TO OpenGL

Cameras (and eye) Ideal Pinhole. Real Pinhole. Real + lens. Depth of field

Overview of Graphics Systems Hearn & Baker Chapter 2. Some slides are taken from Robert Thomsons notes.

Project Sketchpad. Ivan Sutherland (MIT 1963) established the basic interactive paradigm that characterizes interactive computer graphics:

Programming of Graphics

Computer graphic -- Programming with OpenGL I

CSC 8470 Computer Graphics. What is Computer Graphics?

Programming with OpenGL Part 1: Background

CS621 Lab 1 Name: Ihab Zbib

OpenGL Introduction Computer Graphics and Visualization

An Interactive Introduction to OpenGL and OpenGL ES Programming. Ed Angel Dave Shreiner

An Overview GLUT GLSL GLEW

Early History of APIs. PHIGS and X. SGI and GL. Programming with OpenGL Part 1: Background. Objectives

C++ is Fun Part 13 at Turbine/Warner Bros.! Russell Hanson

Graphics Programming. August 31, Programming of the Sierpinski gasket. Programming with OpenGL and C/C++

Programming with OpenGL Part 1: Background

Comp 410/510 Computer Graphics Spring Programming with OpenGL Part 2: First Program

Introduction to OpenGL

Image Rendering. Rendering can be divided into three sub-problems. Image Formation The hidden surface problem visibility determination steps

Lecture 4. Interaction / Graphical Devices. CS 354 Computer Graphics Sunday, January 20, 13

CSE4030 Introduction to Computer Graphics

Announcements OpenGL. Computer Graphics. Autumn 2009 CS4815

C OMPUTER G RAPHICS Thursday

Graphics Pipeline & APIs

Announcements OpenGL. Computer Graphics. Spring CS4815

to OpenGL Introduction Pipeline Graphics pipeline OpenGL pipeline OpenGL syntax Modeling Arrays Conclusion 1 Introduction Introduction to OpenGL

Draw the basic Geometry Objects. Hanyang University

Input and Interaction

Graphics and Visualization

Computer Graphics Introduction to OpenGL

Lecture 3. Understanding of OPenGL programming

Computer Graphics. Downloaded from: LectureNotes 1 CSC-254

Introduction to OpenGL

Graphics Pipeline & APIs

Geometry Primitives. Computer Science Department University of Malta. Sandro Spina Computer Graphics and Simulation Group. CGSG Geometry Primitives

Transcription:

Projects: an example Developed by Nate Robbins Shapes Tutorial What is OpenGL? Graphics rendering API high-quality color images composed of geometric and image primitives window system independent operating system independent close to hardware 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 1 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 2 Various Transformations Pipeline Model How many transformations can you fit in a graphics pipeline? lots Direct implementation of synthetic camera Image formation by computer is analogous to image formation by camera (or human) Specify viewer, objects, lights Let hardware/software form image (via projection) 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 3 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 4 OpenGL Geometric Pipeline OpenGL Architecture State Application ModelView Program Transformation Projection Rasterization Frame Buffer Polynomial Evaluator Per Vertex Operations & Primitive Assembly Vertices Pixels Traditional path for geometric, vertex based primitives. CPU Display List Rasterization Per Fragment Operations Frame Buffer Pixel Operations Texture Memory 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 5 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 6 1

Geometric primitives points, lines and polygons Image Primitives images and bitmaps separate pipeline for images and geometry linked through texture mapping Rendering depends on state colors, materials, light sources, etc. OpenGL as a Renderer OpenGL and the Windowing System OpenGL is concerned only with rendering Window system independent No input functions OpenGL must interact with underlying OS and windowing system Need minimal interface which may be system dependent Done through additional libraries: AGL, GLX, WGL 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 7 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 8 GLU and GLUT OpenGL and Related APIs GLU (OpenGL Utility Library) part of OpenGL NURBS, tessellators, quadric shapes, etc. GLUT (OpenGL Utility Toolkit) portable windowing API not officially part of OpenGL OpenGL Motif widget or similar GLX, AGL or WGL X, Win32, Mac O/S application program GLUT GLU GL software and/or hardware 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 9 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 10 Preliminaries Header Files #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Libraries Enumerated Types OpenGL defines numerous types for compatibility GLfloat, GLint, GLenum, etc. Application Structure Configure and open window Initialize OpenGL state Register input callback functions render resize input: keyboard, mouse, etc. Enter event processing loop GLUT Basics 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 11 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 12 2

Sample Program OpenGL Initialization void main( int argc, char** argv ){ int mode = GLUT_RGB GLUT_DOUBLE; glutinitdisplaymode( mode ); glutcreatewindow( argv[0] ); init(); glutdisplayfunc( display ); glutreshapefunc( resize ); glutkeyboardfunc( key ); glutidlefunc( idle ); glutmainloop(); Set up whatever state you re going to use void init( void ) { glclearcolor( 0.0, 0.0, 0.0, 1.0 ); glcleardepth( 1.0 ); /* Don t do this for Project 1!! */ glenable( GL_LIGHT0 ); glenable( GL_LIGHTING ); glenable( GL_DEPTH_TEST ); 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 13 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 14 GLUT Callback Functions Routine to call when something happens window resize or redraw user input animation Register callbacks with GLUT glutdisplayfunc( display ); glutidlefunc( idle ); glutkeyboardfunc( keyboard ); Do all of your drawing here glutdisplayfunc( display ); void display( void ){ glclear( GL_COLOR_BUFFER_BIT ); glbegin( GL_TRIANGLE_STRIP ); glvertex3fv( v[0] ); glvertex3fv( v[1] ); glvertex3fv( v[2] ); glvertex3fv( v[3] ); /*MAY NEED glflush();*/ glutswapbuffers(); Rendering Callback 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 15 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 16 Use for animation and continuous update glutidlefunc( idle ); Idle Callbacks User Input Callbacks Process user input glutkeyboardfunc( keyboard ); void idle( void ){ t += dt; glutpostredisplay(); void keyboard( char key, int x, int y ){ switch( key ) { case q : case Q : exit( EXIT_SUCCESS ); break; case r : case R : rotate = GL_TRUE; break; 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 17 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 18 3

Geometric Primitives Managing OpenGL State OpenGL Buffers Elementary Rendering OpenGL Geometric Primitives All GL geometry is specified by vertices GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 19 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 20 Simple Example OpenGL Command Formats void drawrhombus( GLfloat color[] ){ glbegin( GL_QUADS ); glcolor3fv( color ); glvertex2f( 0.0, 0.0 ); glvertex2f( 1.0, 0.0 ); glvertex2f( 1.5, 1.118 ); glvertex2f( 0.5, 1.118 ); (0,2) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) glvertex3fv( v ) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit v for scalar form glvertex2f( x, y ) (0,0) (2,0) 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 21 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 22 Specifying Geometric Primitives Primitives are specified using glbegin( primtype ); primtype determines how vertices are combined GLfloat red, green, blue; Glfloat coords[3]; glbegin( primtype ); for ( i = 0; i < nverts; ; ++i ) { glcolor3f( red, green, blue ); glvertex3fv( coords ); RGBA or Color Index 1 2 4 8 16 0 1 2 3 24 25 26 color index mode Red Green 123 219 74 Blue RGBA mode OpenGL Color Models Display 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 23 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 24 4

C standard C++ OK but OpenGL not object oriented Fortran binding exists Java is getting there Language Bindings Interactive Computer Graphics Real power of computer graphics Display is altered in response to User input Helps user Understand data Perceive trends Visualize real/imaginary objects Manage program - GUI Feedback key ingredient! Response letting user know how input was interpreted 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 25 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 26 Graphical User Interface (GUI) Tasks: Dragging continuous movement of graphical object according to input Rubberbanding one end fixed, the other wherever cursor currently is Inking trail of line segments drawn according to input movement Constraints Menu Kinds of feedback? Positioning Spatial: Moving Cursor Linguistic: Specifying X, Y values Selecting Entering Text Entering Numeric Quantities Dials, Sliders Basic Interaction Tasks 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 27 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 28 How to handle transition for Positioning Selection Rotation 2D to 3D Device Mapping Possibilities Multiple Views Hierarchy Traversal Direct Input 3D Interactive Graphics Versus Polling Event Transition in control state of system Event Record Record of system activity Data structure Which event Data corresponding to event Stored in Event Queue Event Handling 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 29 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 30 5

Managed by OS Keeps track of sequence Resources for process to deal with event Events are posted to it Front of queue passed to process that owns it May be based on location Event Queue Event Loop Main program Contains Event Handler that invokes callback function that has been registered for the event that is on the front of the Event Queue 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 31 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 32 Event Handling Program Events Initialization functions Action functions Callback functions Main event loop Invokes event handler Determines which callback, if any Passes control to that event handler When done, control back to event handler Direct control of program has been removed from the program itself and moved to the USER!!!! Events Keypress Mouse Motion Examples KeyDown KeyUp leftbuttondown leftbuttonup With mouse press Without In OpenGL glutkeyboardfunc glutmousefunc glutmotionfunc glutpassivemotionfunc 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 33 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 34 Events Glut Menu Creation Events Window System Software Examples Moving Resizing idle timer What to draw In OpenGL glutreshapefunc glutidlefunc gluttimerfunc glutdisplayfunc typedef enum{ OPTION_1, OPTION_2 menu_entries; void menu_selected(int entry); void mouse_clicked(int button,int state,int x,int y);... void init() {... glutcreatemenu(menu_selected); glutaddmenuentry("option 1",OPTION_1); glutaddmenuentry("option 2",OPTION_2); glutattachmenu(glut_right_button); glutmousefunc(mouse_clicked);... 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 35 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 36 6

Coordinate Systems Raster display and drawing system coordinates may not always be identical: Coordinate Systems OpenGL uses right side up coordinates (0,0) is at bottom left Coordinates increase to the right and up Dimensions set in call to glutinitwindowsize() 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 37 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 38 OpenGL State OpenGL programs run in an environment controlled by the OpenGL state Primarily, characteristics line width, current color, etc. State variables maintain their values until changed Part of the state controls the way in which OpenGL calls cause pixels to be written Simplest way to set this up: glmatrixmode( GL_PROJECTION ); glloadidentity(); gluortho2d( 0, 640.0, 0, 480.0 ); Drawing in OpenGL Can draw more complex figures as combinations of simpler figures: void hardwiredhouse(void) { glbegin(gl_line_loop); glvertex2i(40, 40); glvertex2i(40, 90); glvertex2i(70, 120); glvertex2i(100, 90); glvertex2i(100, 40); glbegin(gl_line_strip); glvertex2i(50, 100); glvertex2i(50, 120); glvertex2i(60, 120); glvertex2i(60, 110); // draw the door // draw the window 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 39 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 40 To change the line width, use: Displaying Line Widths To create a line pattern use: Displaying Line Styles gllinewidth (Glfloat width); Width must be greater than 0.0 and default is 1.0. Line rendering is affected by antialiasing mode. gllinewidth(4); glbegin(gl_lines); glvertex2i(50, 50); glvertex2i(100, 150); gllinestipple(glint factor, Glushort pattern); The pattern is a 16 bit series of 0s and 1 s, beginning with the low-order bit of the pattern. Each bit of pattern is stretched out by a multiple of factor. gllinestipple(1, 0x3F07); glenable(gl_line_stipple); glbegin(gl_lines); glvertex2i(50, 150); glvertex2i(100, 150); 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 41 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 42 7

Displaying Line Styles Displaying Text To display a bitmapped font use: glutbitmapcharacter(void *font, int character); The character is displayed at the current raster position. Use glrasterpos*() to reposition cursor before drawing. glrasterpos2i(100, 100); glutbitmapcharacter(glut_bitmap_times_roman_24, B ); Supported bitmap fonts include: GLUT_BITMAP_8_BY_13 GLUT_BITMAP_9_BY_15 GLUT_BITMAP_TIMES_ROMAN_10 GLUT_BITMAP_TIMES_ROMAN_24 GLUT_BITMAP_HELVETICA_10 GLUT_BITMAP_HELVETICA_12 GLUT_BITMAP_HELVETICA_18 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 43 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 44 OpenGL supports some built-in polygon routines: Polygons glrecti( GLInt x1, GLint y1, GLint x2, GLint y2 ); Draws aligned rectangle with opposite corners (x1,y1) and (x2,y2) Sides are aligned with the coordinate axes Can also draw as a series of vertices: glbegin( GL_POLYGON ); glvertex2f( x0, y0 ); glvertex2f( x1, y1 ); glvertex2f( xn, yn ); Polygons 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 45 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 46 Polygons A polygon is convex if a line connecting any two points of the polygon lies entirely within it. Filled Polygons Convex polygons can be automatically filled with a pattern. 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 47 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 48 8

To fill a convex polygon use: Displaying Filled Polygons Displaying Filled Polygons glpolygonstipple(const Glubyte *mask); The pattern is a 32x32 (128 bytes) bitmap interpreted as a mask of 0 s and 1 s. For each byte, the most significant bit is first. glenable (GL_POLYGON_STIPPLE); glpolygonstipple (pattern); gldisable(gl_polygon_stipple); GLubyte pattern[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC, 0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, 0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0, 0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0, 0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30, 0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08, 0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08, 0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08; 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 49 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 50 Mouse Callbacks Mouse presses and releases can be captured by: glutmousefunc(mymouse); // registered in main() void mymouse(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { Likewise, mouse movements once a button is pressed can be captured by: glutmousefunc(mymovedmouse); // registered in main() Remember, the coordinate system in GLUT requires y values to be inverted (by the current height of the screen). Keyboard interaction is captured by: Keyboard Callbacks glutkeyboardfunc(mykeyboard); // registered in main() void mykeyboard(unsigned char key, int x, int y) { switch (key) { case a : // do something break; 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 51 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 52 Examples Lots of opengl examples: /usr/local/pub/ncs/graphics/opengl /usr/local/glut/progs /usr/local/glut/test 12/3/2004 CG1 - Introduction to OpenGL (v1.01) 53 9