Open GL, Fixed-Function - Introduction to Computer Graphics - Lecture Slides, Slides of Computer Graphics

In Introduction to Computer Graphics course we study the basic concept of the principle of computer architecture. In these lecture slides the key points are:Open Gl, Fixed-Function, Conceptual Graphics Framework, State Machine, State Variables, Pseudo Code, Programming Strategies, Multi-Threaded Applications, Typical Opengl Application, Boilerplate Initialization

Typology: Slides

2012/2013

Uploaded on 04/23/2013

sarasvan
sarasvan 🇮🇳

4.4

(20)

118 documents

1 / 26

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1/28 05 OpenGL
Lecture 04:
OpenGL (Fixed-Function)
Docsity.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Partial preview of the text

Download Open GL, Fixed-Function - Introduction to Computer Graphics - Lecture Slides and more Slides Computer Graphics in PDF only on Docsity!

05 – OpenGL 1/

Lecture 04:

OpenGL (Fixed-Function)

05 – OpenGL 2/

Remember…

• Conceptual Graphics Framework

• Graphics Library can be Direct3D, Java3D, OpenGL, etc.

• It is a software API that controls the functions of a

piece of hardware – the graphics card.

Graphics System/ GPU Application Model/data base

Software Hardware

Application program

Graphics Library

05 – OpenGL 4/

State Variables

• Pseudo code:

SetState (LineStyle, DASHED);

SetState (LineColor, RED);

DrawLine ( PtStart = (x1,y1), PtEnd = (x2,y2) );

SetState (LineColor, BLUE);

DrawLine ( PtStart = (x2,y2), PtEnd = (x3,y3) );

SetState (LineStyle, SOLID);

DrawLine ( PtStart = (x3,y3), PtEnd = (x4,y4) );

What color and shape?

What color and shape?

What color and shape?

05 – OpenGL 5/

State Variables

• Pseudo code:

SetState (LineStyle, DASHED);

SetState (LineColor, RED);

DrawLine ( PtStart = (x1,y1), PtEnd = (x2,y2) );

SetState (LineStyle, DASHED);

SetState (LineColor, BLUE);

DrawLine ( PtStart = (x2,y2), PtEnd = (x3,y3) );

SetState (LineStyle, SOLID);

SetState (LineColor, BLUE);

DrawLine ( PtStart = (x3,y3), PtEnd = (x4,y4) );

What color and shape?

What color and shape?

What color and shape?

05 – OpenGL 7/

State Variables – Pros and Cons

• What if…?

function DrawDashedTriangle (pt1,pt2,p3) {

SetState( LineStyle, DASHED );

DrawLine( PtStart=pt1, PtStart=p2 );

DrawLine( PtStart=pt2, PtStart=p3 );

DrawLine( PtStart=pt3, PtStart=p1 );

• What color is the triangle?

– Pros: trickle down effect, caller can control the

subroutine’s behavior

– Cons: the color is undefined! Who set my color?!

05 – OpenGL 8/

State Variables – Pros and Cons

• What’s right and what’s wrong with this?

function DrawTriangle (pt1,pt2,p3,

int origColor, int curColor,

int origStyle, int curStyle ) {

SetState( LineStyle, curStyle );

SetState(LineColor, curColor);

DrawLine( PtStart=pt1, PtStart=p2 );

DrawLine( PtStart=pt2, PtStart=p3 );

DrawLine( PtStart=pt3, PtStart=p1 );

SetState( LineStyle, origStyle );

SetState(LineColor, origColor);

05 – OpenGL 10/

Forgetting the State?

• What if I forget to set some state?

DrawLine ( PtStart = (x1,y1), PtEnd = (x2,y2) );

• What if I set the wrong state?

SetState(LineStyle, 12345);

DrawLine( PtStart=pt1, PtStart=p2 );

• What if I forget the state a variable is in?

05 – OpenGL 11/

Forgetting the State?

• What if I forget to set some state?

DrawLine ( PtStart = (x1,y1), PtEnd = (x2,y2) );

  • OpenGL provides some good default values. For example, for color, it’s set to (1,1,1,1) – non transparent white

• How do I know if something worked?

SetState(LineStyle, 12345); DrawLine( PtStart=pt1, PtStart=p2 );

  • You don’t. Since it’s not clear if some configuration of states will send OpenGL spinning, if you suspect an error from OpenGL, call Glenum glGetError(void)

• What if I forget the state a variable is in?

  • You should use this sparingly… But you can use void glGetBooleanv(Glenum paraname, Glboolean* params) void glGetFixedv(Glenum paraname, Glfixed* params) void glGetFloatv(Glenum paraname, Glfloat* params) void glGetIntegerv(Glenum paraname, Glint* params)

05 – OpenGL 13/

Typical OpenGL Application

05 – OpenGL 14/

Example

• Here we use GLUT, which is a basic GL window

implementation that is on all platforms.

• Pros: cross-platform, command line, easy to use

• Cons: no GUI support (no buttons, menus, etc.)

05 – OpenGL 16/

Example OpenGL Application

int main( int argc, char** argv ) {

glutInit( &argc, argv ); // Boilerplate initialization

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

#define GLUT_RGB 0 #define GLUT_RGBA GLUT_RGB #define GLUT_INDEX 1 #define GLUT_SINGLE 0 #define GLUT_DOUBLE 2 #define GLUT_ACCUM 4 #define GLUT_ALPHA 8 #define GLUT_DEPTH 16 #define GLUT_STENCIL 32 #if {GLUT_API_VERSION >= 2} #define GLUT_MULTISAMPLE 128 #define GLUT_STEREO 256 #endif #if {GLUT_API_VERSION >= 3} #define GLUT_LUMINANCE 512 #endif

05 – OpenGL 17/

Example OpenGL Application

int main( int argc, char** argv ) {

glutInit( &argc, argv ); // Boilerplate initialization

glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

glutInitWindowPosition( 50, 50 ); //upper left

glutInitWindowSize( 640, 480 ); // width, height, in pixels

glutCreateWindow( "OpenGL Example" ); // window title

glViewport(

/* lower left corner of the viewport */ 0, 0,

/* width, height of the viewport */ 640, 480 ); //lower left

Careful!!

05 – OpenGL 19/

Example OpenGL Application

int main( int argc, char** argv ) {

glutInit( &argc, argv ); // Boilerplate initialization glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH ); glutInitWindowPosition( 50, 50 ); //upper left glutInitWindowSize( 640, 480 ); // width, height, in pixels glutCreateWindow( "OpenGL Example" ); // window title glViewport( /* lower left corner of the viewport / 0, 0, / width, height of the viewport */ 640, 480 ); //lower left glShadeModel( GL_SMOOTH );

glPolygonMode( GL_FRONT, GL_FILL );

setupLighting();

setupCamera(640, 480);

registerCallBacks();

glutMainLoop();

}

Asks OpenGL to render fill the polygons but only in the front-facing side Options are GL_BACK, GL_FRONT_AND_BACK, and GL_POINT, GL_LINE, GL_FILL

05 – OpenGL 20/

Example OpenGL Application

int main( int argc, char** argv ) {

glutInit( &argc, argv ); // Boilerplate initialization glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH ); glutInitWindowPosition( 50, 50 ); //upper left glutInitWindowSize( 640, 480 ); // width, height, in pixels glutCreateWindow( "OpenGL Example" ); // window title glViewport( /* lower left corner of the viewport / 0, 0, / width, height of the viewport */ 640, 480 ); //lower left glShadeModel( GL_SMOOTH );

glPolygonMode( GL_FRONT, GL_FILL );

setupLighting();

setupCamera(640, 480);

registerCallBacks();

glutMainLoop();

}

void setupLighting() { glEnable (GL_LIGHTING); glEnable (GL_LIGHT0);

GLfloat whiteColor[] = {0.25f, 0.25f, 0.25f, 1.0f}; glLightfv (GL_LIGHT0, GL_AMBIENT, whiteColor);

//directional (diffuse) light GLfloat whiteFull[] = {1.0f, 1.0f, 1.0f, 1.0f}; GLfloat lightPos[] = {-1.0f, 1.0f, 1.0f, 0.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteFull); glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

GLfloat grey[] = {0.1f, 0.1f, 0.1f, 1.0f}; glMaterialfv(GL_FRONT, GL_DIFFUSE, grey); //reflect 10% diffuse glMaterialfv(GL_FRONT, GL_AMBIENT, whiteFull);}//reflect full ambient