1 91.427 Computer Graphics I, Fall 2010 Working with Callbacks.

Slides:



Advertisements
Similar presentations
CS 450: COMPUTER GRAPHICS GLUT INPUT FUNCTIONS SPRING 2015 DR. MICHAEL J. REALE.
Advertisements

Chapter 3: Input and Interaction Instructor: Shih-Shinh Huang 1.
CSC461 Lecture 10: Widgets and Picking Objectives Introduce menus in GLUT Picking –Select objects from the display –Three methods Put things together.
OpenGL (I). What is OpenGL (OGL)? OGL is a 3D graphics & modeling library Can also use it to draw 2D objects.
CSC 461: Lecture 51 CSC461 Lecture 5: Simple OpenGL Program Objectives: Discuss a simple program Discuss a simple program Introduce the OpenGL program.
InteractionHofstra University1 Graphics Programming Input and Interaction.
Device Independent Graphics and OpenGL
31/1/2006Based on: Angel (4th Edition) & Akeine-Möller & Haines (2nd Edition)1 CSC345: Advanced Graphics & Virtual Environments Lecture 3: Introduction.
InteractionHofstra University1 Graphics Programming Input and Interaction.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 GLUT Callback Functions.
Based on slides created by Edward Angel
CSC461 Lecture 9: GLUT Callbacks Objectives Introduce double buffering for smooth animations Programming event input with GLUT.
CS 480/680 Computer Graphics Programming with Open GL Part 8: Working with Callbacks Dr. Frederick C Harris, Jr. Fall 2011.
Using Graphics Libraries Lecture 3 Mon, Sep 1, 2003.
Demetriou/Loizidou – ACSC330 – Chapter 3 Input and Interaction Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute.
Events and Coordinates Lecture 5 Fri, Sep 5, 2003.
GLWidget Description Jason Goffeney 3/8/2006. GLWidget The GLWidget class extends the Qt QGLWidget. The QGLWidget is a Qt Widget that happens to have.
1 Working with Callbacks Yuanfeng Zhou Shandong University.
COMPUTER GRAPHICS Hochiminh city University of Technology Faculty of Computer Science and Engineering CHAPTER 03: Input & Interaction.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Chapter 3: Input and Interaction.
More on Drawing in OpenGL: Examples CSC 2141 Introduction to Computer Graphics.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 Programming with OpenGL Part 1: Background.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 3: Three Dimensions Ed Angel Professor of Computer Science,
WORKING WITH CALLBACKS Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico Angel: Interactive.
Fundamentals of Computer Graphics Part 3 prof.ing.Václav Skala, CSc. University of West Bohemia Plzeň, Czech Republic ©2002 Prepared with Angel,E.: Interactive.
Interaction with Graphics System
Lecture 5: Interaction 1  Principles of Interactive Graphics  CMSCD2012  Dr David England, Room 711,  ex 2271 
CS 450: COMPUTER GRAPHICS REVIEW: GLUT INPUT FUNCTIONS SPRING 2015 DR. MICHAEL J. REALE.
Input and Interaction Chapter 3. CS 480/680 2Chapter 3 -- Input and Interaction Introduction: Introduction: We now turn to the development of interactive.
1Computer Graphics Input and Interaction Lecture 8 John Shearer Culture Lab – space 2
CAP 4703 Computer Graphic Methods Prof. Roy Levow Lecture 3.
1 Input and Interaction. 2 Input Devices Physical input devices Keyboard devices and pointing devices Logical input devices.
Computer Graphics I, Fall 2010 Input and Interaction.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical.
 “OpenGL (Open Graphics Library) is a standard specification defining a cross- language cross-platform API for writing applications that produce 2D and.
CS 480/680 Computer Graphics Programming with Open GL Part 7: Input and Interaction Dr. Frederick C Harris, Jr. Fall 2011.
Program 2 due 02/01  Be sure to document your program  program level doc  your name  what the program does  each function  describe the arguments.
1 Input and Interaction. 2 Objectives Introduce the basic input devices ­Physical Devices ­Logical Devices ­Input Modes Event-driven input Introduce double.
Computer Graphics: Programming, Problem Solving, and Visual Communication Steve Cunningham California State University Stanislaus and Grinnell College.
Input and Interaction Yuanfeng Zhou Shandong University Software College 1.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 OpenGL Transformations.
University of New Mexico
Input and Interaction Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
Pop-Up Menus Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Friday, September 26, 2003.
Mouse events, Advanced camera control George Georgiev Telerik Corporation
GLUT functions glutInit allows application to get command line arguments and initializes system gluInitDisplayMode requests properties for the window.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
12/22/ :38 1 Comp 175C - Computer Graphics Dan Hebert Computer Graphics Comp 175 Chapter 3 Instructor: Dan Hebert.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Input and Interaction Ed Angel Professor of Computer Science, Electrical and Computer Engineering,
Computer Graphics I, Fall Programming with OpenGL Part 2: Complete Programs.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 Working with Callbacks.
CSC Graphics Programming Budditha Hettige Department of Statistics and Computer Science.
INTRODUCTION TO OPENGL
C O M P U T E R G R A P H I C S Guoying Zhao 1 / 86 C O M P U T E R G R A P H I C S Guoying Zhao 1 / 86 Computer Graphics Programming with OpenGL II.
Review GLUT Callback Functions
Programming with OpenGL Part 0: 3D API
Computer Graphics - Chapter 3 Input and Interaction
Working with Callbacks
Introduction to the Mouse
Input and Interaction Ed Angel
CS5500 Computer Graphics March 2, 2006.
CSC461 Lecture 8: Input Devices
The User Interface Lecture 2 Mon, Aug 27, 2007.
Input and Interaction Chapter 3.
Input and Interactions
Working with Callbacks
Fundamentals of Computer Graphics Part 3
Input and Interaction Ed Angel
University of New Mexico
Input and Interaction Ed Angel
Presentation transcript:

Computer Graphics I, Fall 2010 Working with Callbacks

Computer Graphics I, Fall 2010 Objectives Learn to build interactive programs using GLUT callbacks ­Mouse ­Keyboard ­Reshape Introduce menus in GLUT

Computer Graphics I, Fall 2010 The mouse callback glutMouseFunc(mymouse) void mymouse(GLint button, GLint state, GLint x, GLint y) Returns ­which button ( GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON ) caused event ­state of that button ( GLUT_UP, GLUT_DOWN ) ­Position in window

Computer Graphics I, Fall 2010 Positioning Position in screen window usually measured in pixels with origin at top-left corner Consequence of refresh done from top to bottom OpenGL uses world coo system w/ origin at bottom left Must invert y coordinate returned by callback by height of window y = h – y; (0,0) h w

Computer Graphics I, Fall 2010 Obtaining the window size To invert y position need window height ­Height can change during program execution ­Track with global variable ­New height returned to reshape callback ­will look at in detail soon ­Can also use query functions glGetIntv glGetFloatv to obtain any value that is part of the state

Computer Graphics I, Fall 2010 Terminating a program In original programs, no way to terminate through OpenGL Can use simple mouse callback void mouse(int btn, int state, int x, int y) { if(btn==GLUT_RIGHT_BUTTON && state==GLUT_DOWN) exit(0); }

Computer Graphics I, Fall 2010 Using the mouse position In next example, draw small square at location of mouse each time left mouse button clicked This example does not use display callback But … required by GLUT Can use empty display callback function mydisplay(){}

Computer Graphics I, Fall 2010 Drawing squares at cursor location void mymouse(int btn, int state, int x, int y) { if(btn==GLUT_RIGHT_BUTTON && state==GLUT_DOWN) exit(0); if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN) drawSquare(x, y); } void drawSquare(int x, int y) { y=w-y; /* invert y position */ glColor3ub( (char) rand()%256, (char) rand )%256, (char) rand()%256); /* a random color */ glBegin(GL_POLYGON); glVertex2f(x+size, y+size); glVertex2f(x-size, y+size); glVertex2f(x-size, y-size); glVertex2f(x+size, y-size); glEnd(); }

Computer Graphics I, Fall 2010 Using the motion callback Can draw squares (anything) continuously as long as mouse button depressed by using motion callback ­glutMotionFunc(drawSquare) Can draw squares without depressing button using passive motion callback ­glutPassiveMotionFunc(drawSquare)

Computer Graphics I, Fall 2010 Using the keyboard glutKeyboardFunc(mykey) void mykey(unsigned char key, int x, int y) ­Returns ASCII code of key depressed and mouse location void mykey() { if(key == ‘Q’ | key == ‘q’) exit(0); }

Computer Graphics I, Fall 2010 Special and Modifier Keys GLUT defines special keys in glut.h ­Function key 1: GLUT_KEY_F1 ­Up arrow key: GLUT_KEY_UP if(key == ‘GLUT_KEY_F1’ …… Can also check if one of modifiers ­GLUT_ACTIVE_SHIFT ­GLUT_ACTIVE_CTRL ­GLUT_ACTIVE_ALT is depressed by glutGetModifiers() ­Allows emulation of three-button mouse with one- or two-button mice

Computer Graphics I, Fall 2010 Reshaping the window Can reshape and resize OpenGL display window by pulling corner of window What happens to display? ­Must redraw from application ­Two possibilities Display part of world Display whole world but force to fit in new window –Can alter aspect ratio

Computer Graphics I, Fall 2010 Reshape possibilities original reshaped

Computer Graphics I, Fall 2010 The Reshape callback glutReshapeFunc(myreshape) void myreshape( int w, int h) ­Returns width and height of new window (in pixels) ­redisplay posted automatically at end of execution of callback ­GLUT has default reshape callback ­but you probably want to define your own reshape callback good place to put viewing functions because invoked when window first opened

Computer Graphics I, Fall 2010 Example Reshape This reshape preserves shapes by making viewport and world window have same aspect ratio void myReshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); /* switch matrix mode */ glLoadIdentity(); if (w <= h) gluOrtho2D(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w, 2.0 * (GLfloat) h / (GLfloat) w); else gluOrtho2D(-2.0 * (GLfloat) w / (GLfloat) h, 2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0); glMatrixMode(GL_MODELVIEW); /* return to modelview mode */ }

Computer Graphics I, Fall 2010 Toolkits and Widgets Most window systems provide toolkit or library of functions for building user interfaces use special types of windows called widgets Widget sets include tools such as ­Menus ­Slidebars ­Dials ­Input boxes But toolkits tend to be platform dependent GLUT provides few widgets including menus

Computer Graphics I, Fall 2010 Menus GLUT supports pop-up menus ­Menu can have submenus Three steps ­Define entries for menu ­Define action for each menu item Action carried out if entry selected ­Attach menu to mouse button

Computer Graphics I, Fall 2010 Defining a simple menu In main.c menu_id = glutCreateMenu(mymenu); glutAddmenuEntry(“clear Screen”, 1); glutAddMenuEntry(“exit”, 2); glutAttachMenu(GLUT_RIGHT_BUTTON); entries that appear when right button depressed identifiers clear screen exit

Computer Graphics I, Fall 2010 Menu actions ­Menu callback ­Note each menu has id ­returned when created ­Add submenus by glutAddSubMenu(char *submenu_name, submenu id) void mymenu(int id) { if(id == 1) glClear(); if(id == 2) exit(0); } entry in parent menu

Computer Graphics I, Fall 2010 Other functions in GLUT Dynamic Windows ­Create and destroy during execution Subwindows Multiple Windows Changing callbacks during execution Timers Portable fonts ­glutBitmapCharacter ­glutStrokeCharacter