Opengl i
Download
1 / 29

OpenGL-1 - PowerPoint PPT Presentation


  • 397 Views
  • Uploaded on

OpenGL (I) What is OpenGL (OGL)? OGL is a 3D graphics & modeling library Can also use it to draw 2D objects. What is OpenGL (OGL)? Interactive computer graphics system that allows us to access graphics hardware Easy to use Programs run efficiently Hardware-independent

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'OpenGL-1' - issac


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

What is opengl ogl l.jpg
What is OpenGL (OGL)?

  • OGL is a 3D graphics & modeling library

  • Can also use it to draw 2D objects.


What is opengl ogl3 l.jpg
What is OpenGL (OGL)?

  • Interactive computer graphics system that allows us to access graphics hardware

    • Easy to use

    • Programs run efficiently

    • Hardware-independent

  • Graphics API (Application Programming Interface)

    • A library of functions

    • Others: DirectX (Microsoft), Java3D


What is opengl ogl4 l.jpg
What is OpenGL (OGL)?

  • OGL is independent of any specific window system  basic window operations are not included

  • Graphics user interface programming:

    • GLUT = OGL Utility Toolkit

      • Simple but easy to use


Programming environment l.jpg
Programming Environment

  • OGL is usually installed on a MS Windows machine.

  • Programming environment

    • MS Visual Studio .Net 2003

  • Libraries we will use

    • OGL (basic API tool)

    • GLU (OGL Utility Library)

    • GLUT (OGL Utility Toolkit, a windowing toolkit that handles window system operations)


Ogl data types l.jpg
OGL Data Types

  • To make more portable, OGL provides internal data types


Basic ogl syntax l.jpg
Basic OGL Syntax

  • Functions are prefixed with gl,

    • glBegin, glClear, glClearColor

  • Constants in capital letters, and the underscore is used as a separator

    • GL_2D, GL_LINES, GL_TRIANGLES

  • Built-in data-type names begin with GL

    • GLbyte, GLshort, GLint, GLboolean



First ogl program drawdots9 l.jpg
First OGL Program: DrawDots

  • Our first program is not interactive. It consists of three functions: main, myDisplay, myInit. (see accompanying demo program)

intmain(intargc, char** argv)

{

glutInit(&argc, argv); // initialize the toolkit

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // set the display mode

glutInitWindowSize(640, 480); // set window size

glutInitWindowPosition(100, 150); // set window position

glutCreateWindow("my first attemp"); // open the screen window

glutDisplayFunc(myDisplay); // register redraw function

myInit();// additional initializations as necessary

glutMainLoop(); // go into a perpetual loop

}


Creating window for drawing l.jpg
Creating Window for Drawing

  • The first five function calls use GLUT to open a window for drawing

sx

(150, 100)

Coordinate system in OGL

sy


First ogl program drawdots11 l.jpg
First OGL Program: DrawDots

  • Draw primitives

    • Display callback function myDisplay

voidmyDisplay()

{

glClear(GL_COLOR_BUFFER_BIT); // clear the screen

glBegin(GL_POINTS);

glVertex2i(100, 50); // draw three dots

glVertex2i(100, 130);

glVertex2i(150, 130);

glEnd();

glFlush(); // send all output to display

}


First ogl program drawdots12 l.jpg
First OGL Program: DrawDots

  • Draw primitives

    • glBegin(GLenum mode)

      • mode can be GL_POINTS, GL_LINES, GL_POLYGON, etc.


First ogl program drawdots13 l.jpg
First OGL Program: DrawDots

  • Initialization

voidmyInit()

{

glClearColor(1.0, 0.0, 0.0, 0.0); // set red background color

glColor3f(0.0, 1.0, 0.0); // set the drawing color

glPointSize(10.0); // a 'dot' is 10 by 10 pixels

// The following lines establish the coordinate system.

// Details will be covered later.

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0, 640, 0, 480);

}


First ogl program drawdots14 l.jpg
First OGL Program: DrawDots

  • OpenGL is a state machine

    • It keeps track of many state variables

      • Current size of a point, current color of drawing, current background color, etc.

      • Color of drawing is specified using glColor3f(red, green, blue); (range: [0, 1])

      • Background color is set with glClearColor(red, green, blue, alpha). glClear clears the entire window to the background color (cf. myDisplay).

    • The value of a state variable remains active until a new value is given.


Line drawing l.jpg
Line Drawing

glLineWidth(2.0); // set line thickness

glBegin(GL_LINES);

glVertex2i(10, 20); // first horizontal line

glVertex2i(40, 20);

glVertex2i(20, 10); // first vertical line

glVertex2i(20, 40);

// four more calls to glVertex here for the other two lines

glEnd();


Drawing modes l.jpg
Drawing Modes

  • glBegin(GLenum mode)


Skeleton of an interactive ogl program using glut l.jpg
Skeleton of an interactive OGL program using GLUT

intmain(intargc, char** argv)

{

glutInit(&argc, argv); // initialize the toolkit

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // set the display mode

glutInitWindowSize(640, 480); // set window size

glutInitWindowPosition(150, 100); // set window position

glutCreateWindow("my first attempt"); // open the screen window

// register the callback functions

glutDisplayFunc(myDisplay);

glutReshapeFunc(myReshape);

glutMouseFunc(myMouse);

glutKeyboardFunc(myKeyboard);

myInit(); // additional initializations as necessary

glutMainLoop(); // go into a perpetual loop

}


Event driven programming callbacks l.jpg
Event-driven Programming & Callbacks

  • Event-driven programming

    • A property of most window-based programs

  • The programs respond to various events

    • Click of a mouse, resizing of a window, etc.

  • The system automatically manages an event queue

    • Deal with events first-come, first-served

  • Programmers write functions (called callback functions) that will be called when events occur.


Event driven programming callbacks19 l.jpg
Event-driven Programming & Callbacks

  • Callback functions in GLUT

    • For example, glutMouseFunc(myMouse)

      • Register function myMouse() as the function to be executed when a mouse event occurs.

      • Prefix glut indicates that this function is part of GLUT

      • If a particular program does not make use of a mouse, the corresponding callback function need not be registered.


Event driven programming callbacks20 l.jpg
Event-driven Programming & Callbacks

  • glutDisplayFunc(myDisplay)

    • Whenever the system determines that a window should be redrawn, it issues a “redraw” event. Redraw event happens

      • When the window is first opened

      • When the window is exposed by moving another window off it

      • When your program explicitly requests that it be redrawn (through the call glutPostRedisplay) (useful for animation)

    • myDisplay() is registered as the callback function for a redraw event.

Coordinate system in OpenGL


Event driven programming callbacks21 l.jpg
Event-driven Programming & Callbacks

  • glutReshapeFunc(myReshape)

    • Screen windows can be resized by the user, usually by dragging a corner of the window to a new position with the mouse.

    • myReshape(int width, int height) is automatically passed arguments reporting the new width and height of the reshaped window.

Coordinate system in OpenGL


Event driven programming callbacks22 l.jpg
Event-driven Programming & Callbacks

  • glutMouseFunc(myMouse)

    • When one of the mouse button is pressed or released, a mouse event is issued.

    • myMouse(int button, int state, int x, int y) is automatically passed arguments describing the location of the mouse and the nature of the action initiated by pressing the button.

Coordinate system in OpenGL


Event driven programming callbacks23 l.jpg
Event-driven Programming & Callbacks

  • glutKeyboardFunc(myKeyboard)

    • Keyboard event is issued when some key is pressed or released.

    • myKeyboard(unsigned char key, int x, int y) is automatically passed arguments that tell which key was pressed. It is also passed the data indicating the location of the mouse at the time the key was pressed.

Coordinate system in OpenGL



Mouse interaction l.jpg
Mouse Interaction

  • Let’s see a demo for mouse & keyboard callbacks

  • glutMouseFunc(myMouse)

    • Mouse button is pressed or released.

  • glutMotionFunc(myMouse)

    • Mouse is moved while one of the buttons is pressed.

voidmyMouse(intbutton, intstate, intx, inty)

{

if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)

{

glBegin(GL_POINTS);

glVertex2i(x, screenHeight - y);

glEnd();

glFlush();

}

}

Note the y value is the number of pixels down from the top of the window!


Mouse interaction26 l.jpg
Mouse Interaction

  • Mouse motion example

    • “freehand” drawing with a fat brush

    • See second demo program

voidmyMovedMouse(intmouseX, intmouseY)

{

GLintx = mouseX;

GLinty = screenHeight - mouseY; // flip it as usual

GLintbrushSize = 20;

glRecti(x, y, x + brushSize, y + brushSize);

glFlush();

}


Keyboard interaction l.jpg
Keyboard Interaction

voidmyKeyboard(unsignedcharkey, intmouseX, intmouseY)

{

GLintx = mouseX;

GLinty = screenHeight - mouseY; // flip it as usual

switch(key) // value of key is the ASCII value of the key pressed

{

case 'p': // draw a dot at the mouse position

glBegin(GL_POINTS);

glVertex2i(x, y);

glEnd();

glFlush();

break;

case 'E': exit(-1); // terminate the program

}

}


Other glut techniques l.jpg
Other GLUT Techniques

  • Recommended GLUT tutorial

    • http://www.lighthouse3d.com/opengl/glut/

    • Topics we didn’t cover but useful

      • Animation: void glutIdleFunc(void (*func)(void))

      • Popup menus: int glutCreateMenu(void (*func)(int value));

      • Bitmap fonts: void glutBitmapCharacter(void *font, int character)

      • Sub windows: int glutCreateSubWindow(int parentWindow, int x, int y, int width, int height);

  • Recommended reading material

    • Chapter 1 & 2 of OpenGL red book


Recommended resources l.jpg
Recommended Resources

  • OpenGL official Website

  • OpenGL Utility Toolkit (GLUT) (download GLUT)

  • Nice GLUT Tutorial

  • NEHE: OpenGL tutorial

  • OpenGL red book


ad