opengl - linköping universitywebstaff.itn.liu.se/~jimjo/courses/tncg14-2010/documents/... · 2010....

55
OpenGL Jimmy Johansson C‐Research Linköping University

Upload: others

Post on 19-Nov-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGL

JimmyJohansson

C‐Research

LinköpingUniversity

Page 2: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Background

•  So?wareinterfacetographicshardware•  250+commands•  Objects(models)arebuiltfromgeometricprimiKves

•  Points,lines,trianglesandpolygons

•  CurrentVersions•  2.x•  3.x

Page 3: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Background

•  Portability•  Fastrendering•  Onlythecore

•  Otherfeaturesareavailableelsewhere•  GLU,GLUT,GLEW,GLUI

Page 4: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

TheStateMachine

•  Noobjectorienteddesign

•  Statemachine•  Setstatesandparameters

•  Executecommands

•  States•  Transformmode•  Renderingmode

•  Errorstate

Page 5: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

TheStateMachine

•  glEnableandglDisable•  e.g.:GL_LIGHTING,GL_DEPTH_TEST

•  Errorcontrolandfeedback•  glGetError

•  Parameters•  Colour,normal,texture,lighKng

Page 6: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

APIConvenKons

•  FuncKonnamesbeginwithglandusemixedcase:glBegin, glEnd, glFrontFace

•  ConstantsbeginwithGL_anduseonlyuppercase:GL_TRIANGLES, GL_BACK, GL_LIGHT0

•  TypesbeginwithGLanduseonlylowercase:GLbyte, GLubyte, GLint, GLfloat, ...

Page 7: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

APIconvenKons:FuncKonnamesshowarguments

•  GlVertex{234}{sifd}[v]() •  glVertex3i(Glint x,Glint y,Glint z) •  glVertex3fv(Glfloat *v)

•  argumenttypes:•  GLbyte,GLshort,GLint,GLfloat,GLdouble•  unsignedbyte(ub),short(us),int(ui)

•  vindicatesvector

Page 8: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

ExamplefuncKonnames

•  glVertex3f(1.0,2.0,3.142);

•  glVertex3dv(dvec);•  GLdoubledvec[3]={1.0,2.0,3.142};

Page 9: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLPrimiKves•  Points

GL_POINTS•  Lines

GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP•  Triangles

GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN

•  QuadrilateralsandallotherpolygonsGL_QUADS, GL_QUAD_STRIP, GL_POLYGON

Page 10: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLPrimiKves

Page 11: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 12: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 13: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 14: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 15: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 16: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 17: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 18: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Example

#include <whateverYouNeed.h>

main() {

InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0);

glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

Page 19: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Rendering

•  Vertex‐by‐vertex•  Begingeometrystate•  PutverKces•  Endgeometrystate

•  Arrayofdata•  Vertexpointer•  Drawarrays•  Drawelements

Page 20: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Vertexbyvertex

glBegin(GL_TRIANGLES); /* First Triangle */ glVertex3f( 1.0, 0.0, 0.0); glVertex3f(-0.5, 1.0, 0.5); glVertex3f( 0.0,-0.5,-0.2);

/* Second Triangle */ glVertex3f( 1.0,-0.4, 0.0); glVertex3f( 0.0, 0.6, 0.0); glVertex3f(-0.6,-0.2, 0.4);

glEnd();

Page 21: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

glBegin(GL_QUAD_STRIP); /* First quad */ glVertex3f(-0.5,-0.5,-0.5); glVertex3f(-0.5, 0.5,-0.5); glVertex3f( 0.5,-0.5,-0.5); glVertex3f( 0.5, 0.5,-0.5);

/* Second */ glVertex3f( 0.5,-0.5, 0.5); glVertex3f( 0.5, 0.5, 0.5);

/* Third */ glVertex3f(-0.5,-0.5, 0.5); glVertex3f(-0.5, 0.5, 0.5);

/* Fourth */ glVertex3f(-0.5,-0.5,-0.5); glVertex3f(-0.5, 0.5,-0.5);

glEnd();

Vertexbyvertex

Page 22: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

static GLfloat vertices[] = { 1.0, 0.0, 0.0, -0.5, 1.0, 0.5, 0.0,-0.5,-0.2, 1.0,-0.4, 0.0, 0.0, 0.6, 0.0, -0.6,-0.2, 0.4 };

glVertexPointer( 3, GL_FLOAT, 0, vertices ); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays( GL_TRIANGLES, 0, 6 ); glDisableClientState(GL_VERTEX_ARRAY);

ArrayofData

Page 23: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

static GLfloat vertices[] = { 1.0, 0.0, 0.0, -0.5, 1.0, 0.5, 0.0,-0.5,-0.2, 1.0,-0.4, 0.0, 0.0, 0.6, 0.0, -0.6,-0.2, 0.4 };

static GLubyte indices[] = { 0, 1, 2, 3, 4, 5 };

glVertexPointer( 3, GL_FLOAT, 0, vertices ); glEnableClientState(GL_VERTEX_ARRAY); glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices );

glDisableClientState(GL_VERTEX_ARRAY);

ArrayofData

Page 24: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Page 25: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Handles parametric shapes, derives vertices from control points

Page 26: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Convert vertices into primitives. Clipping. Convert vertices into primitives. Clipping.

Page 27: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Unpacking, scaling, clamping, etc. of pixel data Unpacking, scaling, clamping, etc. of pixel data

Page 28: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Converting pixel and geometric data into fragments. Converting pixel and geometric data into fragments.

Page 29: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

OpenGLBlockDiagram

FRAME BUFFER

RASTERIZ- ATION EVALUATOR

TEXTURE MEMORY

PIXEL OPS

PER-VERTEX OPS

PRIMITIVE ASSEMBLY

PER-FRAG OPS

Texturing, scissor-, alpha-, depth tests, blending, etc.

Page 30: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

RasterizaKon

•  Fragments‐datanecessarytopoten&allyupdateapixelintheframebuffer•  depth•  interpolatedajributes

•  color•  texturecoords•  etc

•  alpha•  Normal

•  ConvertprimiKvesintofragments

Page 31: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

RasterizaKon

•  glHint•  AnKaliasing,perspecKvecorrecKon

Page 32: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Blending

•  Combinecolourvalueoffragmentwithpixelvaluestoredinframebuffer•  Orderdependent

Page 33: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Transforms

•  Viewtransform

•  Modeltransform•  ProjecKontransform

•  Viewporttransform

Page 34: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

ViewTransforms

•  ViewPoint/Camera•  glOrtho( L, R, B, T, N, F )

•  GluPerspective (fovy, aspect, zNear, zFar )

Page 35: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

ModelTransform

•  Management•  GlLoadMatrix/Identity •  glPush/PopMatrix

•  ManipulaKon•  glTranslate •  glRotate •  glScale

Page 36: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

TransformsPutTogether

•  Model+Viewtransform=Modelviewtransform

•  ProjecKontransform•  Viewporttransform

Page 37: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Colours

•  glColor,glClearColor

•  RGB,RGBA,

•  ExecutewithglVertex,glClear

Page 38: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

RenderingwithColours

glBegin(GL_TRIANGLES);

glColor4f( 1.0, 0.0, 0.0, 1.0 ); glVertex3f( 1.0, 0.0, 0.0); glVertex3f(-0.5, 1.0, 0.5); glVertex3f( 0.0,-0.5,-0.2);

glColor4f( 0.0, 0.0, 1.0, 0.5 ); glVertex3f( 1.0,-0.4, 0.0); glVertex3f( 0.0, 0.6, 0.0); glVertex3f(-0.6,-0.2, 0.4);

glEnd();

Page 39: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

RenderingwithColourArray

static GLfloat vertices[] = { 1.0, 0.0, 0.0, -0.5, 1.0, 0.5, 0.0,-0.5,-0.2, 1.0,-0.4, 0.0, 0.0, 0.6, 0.0, -0.6,-0.2, 0.4 }; static GLfloat colors[] = { 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.0, 1.0, 0.5, 0.0, 0.0, 1.0, 0.5 };

glVertexPointer( 3, GL_FLOAT, 0, vertices ); glColorPointer( 3, GL_FLOAT, 0, colors );

glEnableClientState(GL_VERTEX_ARRAY|GL_COLOR_ARRAY); glDrawArrays( GL_TRIANGLES, 0, 6 ); glDisableClientState(GL_VERTEX_ARRAY|GL_COLOR_ARRAY);

Page 40: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

RenderingwithInterleavedArrays

static GLfloat colverts[] = { 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, -0.5, 1.0, 0.5, 1.0, 0.0, 0.0, 1.0, 0.0,-0.5,-0.2, 0.0, 0.0, 1.0, 0.5, 1.0,-0.4, 0.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.6, 0.0, 0.0, 0.0, 1.0, 0.5, -0.6,-0.2, 0.4 };

glInterleavedArrays( GL_C4F_V3F, 0, colverts ); glDrawArrays( GL_TRIANGLES, 0, 6 ); glDisableClientState(GL_VERTEX_ARRAY|GL_COLOR_ARRAY);

Page 41: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Shading

•  AcKvateshading•  glShadeModel,flatorsmooth•  Requiresnormalizednormals

•  AutomaKcnormalizaKon•  glEnable(GL_NORMALIZE) ‏•  Expensive!

Page 42: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

SmoothShading

Page 43: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Textures

•  Texturestates•  Targets:1D,2D,3Dtexture

•  glEnable / glDisable •  glTexEnv{if}[v], egGL_TEXTURE_ENV_MODE •  What happens when a fragment is textured

•  Decal,replace,modulate,blend,add,combine•  glTexParameter{if}[v]

•  egborder,interpolaKon,level‐of‐details•  Texturestatesets

•  glGenTextures •  glBindTexture

Page 44: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

TextureData

•  Loaddataintomemory•  glTexImage{123}D / glTexSubImage{123}D

•  Internalformat,dataformat,border,size,type,etc

Page 45: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

TextureCoordinates

•  Vertex‐by‐vertex•  glTexCoord

•  Vertexarrays•  glTexCoordPointer

•  AutomaKccoordinates•  glTexGen

Page 46: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

2DTextureExample

Page 47: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

2DTextureCodeExample

Page 48: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

2DTextureExample

Page 49: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

2DTextureExample

Page 50: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

LighKng

•  glLightModel•  EglocalorinfiniKvelyfaraway,twosidedlighKng

•  Lightsources•  Eightsources•  Headlightdefault(GL_LIGHT0)

•  Parameters•  glLight{if}[v](source,pname,value(s))•  Ambient,diffuse,specular,posiKon(direcKon),

spotdirecKon,cutoff,ajenuaKon

Page 51: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

Material

•  Objectmaterials•  AcKvatedbylighKng

•  Parameters•  glMaterial{if}[v](face,pname,value(s)) ‏•  Diffuse,ambient‐diffuse,

specular,shininess,emission

Page 52: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLU(OpenGLUKlityLibrary)

•  Composedgeometries•  gluSphere,gluCylinder,etc

•  Tesselators,Nurbs•  Subdividecomplexpolygons

•  Nurblines,nurbsurfaces•  Cameramanagement

•  gluPerspecKve,gluLookat

Page 53: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLUT(OpenGLUKlityToolkit)

•  Windowhandling•  Initcontext,displaymode,etc•  Createwindows,setsize,etc•  EntrypointisglutMainLoop

•  Events•  Mouse,keyboard,display,etc

•  Callbacks(hooks)•  Postredisplay

•  Complexobjects•  Sphere,torus,teapot,etc

Page 54: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLUI

•  UserInterfacelibrary•  Add‐ontoOpenGL•  Portable(usesOpenGL)•  Easytouse

Page 55: OpenGL - Linköping Universitywebstaff.itn.liu.se/~jimjo/courses/TNCG14-2010/documents/... · 2010. 3. 22. · GL_TRIANGLES, GL_BACK, GL_LIGHT0 • Types begin with GL and use only

GLEW(ExtensionWranglerLibrary)

•  Cross‐plaqormopen‐sourceC/C++extensionloadinglibrary

•  Headerexposescompleteset•  StandardfuncKonsforanyOpenGLversion•  Allextensions

•  FuncKonstocheckcapabiliKes•  ActualversionofOpenGL•  ActuallysupportedfuncKonsandextensions