Basic of computer graphics with OpenGL. Handful graphics function  OpenGL :  by silicon graphics  PHIGS :  Programmer’s Hierarchical Graphics System.

Slides:



Advertisements
Similar presentations
Computer Graphics - Graphics Programming -
Advertisements

Chapter 2: Graphics Programming
Pemrograman OpenGL Dasar
© 2004, Tom Duff and George Ledin Jr1 Lectures OpenGL Introduction By Tom Duff Pixar Animation Studios Emeryville, California and George Ledin Jr Sonoma.
Informationsteknologi Monday, October 29, 2007Computer Graphics - Class 21 Today’s class Graphics programming Color.
OpenGL (Graphics Library) Software Interface to graphics software Allows to create interactive programs that produce color images of moving 3D objects.
CSC 461: Lecture 51 CSC461 Lecture 5: Simple OpenGL Program Objectives: Discuss a simple program Discuss a simple program Introduce the OpenGL program.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 2: Complete Programs Ed Angel Professor of Computer Science,
1 CSC461 Lecture 7: 3D Programming in OpenGL Objectives: Develop 2D and 3D examples -- Sierpinski gasket: a fractal Develop 2D and 3D examples -- Sierpinski.
Sierpinski Gasket Program
CAP 4703 Computer Graphic Methods Prof. Roy Levow Lecture 2.
Basic OpenGL Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003.
Introduction to OpenGL and GLUT GLUT. What is OpenGL? An application programming interface (API) A (low-level) Graphics rendering API Generate high-quality.
Demetriou/Loizidou – ACSC330 – Chapter 2 Graphics Programming Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute.
Graphics Architectures & OpenGL API Introduction Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
CSE 470: Computer Graphics. 10/15/ Defining a Vertex A 2D vertex: glVertex2f(GLfloat x, GLfloat y); 2D vertexfloating pointopenGL parameter type.
Lecture 3 OpenGL.
Graphics Systems and OpenGL. Business of Generating Images Images are made up of pixels.
Graphics Programming Chapter 2. CS 480/680 2Chapter 2 -- Graphics Programming Introduction: Introduction: Our approach is programming oriented. Our approach.
Ch 2 Graphics Programming page 1 CSC 367 Coordinate Systems (2.1.2) Device coordinates, or screen coordinates (pixels) put limitations on programmers and.
1. OpenGL/GLU/GLUT  OpenGL v4.0 (latest) is the “core” library that is platform independent  GLUT v3.7 is an auxiliary library that handles window creation,
1 Figures are extracted from Angel's book (ISBN x) The Human Visual System vs The Pinhole camera Human Visual System Visible Spectrum Pinhole.
1 Graphics CSCI 343, Fall 2015 Lecture 4 More on WebGL.
Basic of computer graphics with OpenGL
Chun-Yuan Lin Graphics Programming 2015/11/17 1 CG.
1 Programming with OpenGL Part 3: Three Dimensions Yuanfeng Zhou Shandong University.
Computer Graphics I, Fall 2010 Programming with OpenGL Part 3: Three Dimensions.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 Programming with OpenGL Review.
CS 480/680 Computer Graphics Programming with Open GL Part 6: Three Dimensions Dr. Frederick C Harris, Jr. Fall 2011.
Chapter 2 Computer Graphics and Visualization.   Programming oriented approach is used.  Minimal application programmer's interface (API) is used which.
Draw a Simple Object. Pixel pipeline Vertex pipeline Course Map Transformation & Lighting Primitive assembly Viewport culling & clipping Texture blending.
1 Chapter 2 Graphics Programming. 2 Using OpenGL in Visual C++ – 1/3 Opengl32.dll and glu32.dll should be in the system folder Opengl32.lib and glu32.lib.
Chun-Yuan Lin Introduction to OpenGL 2015/12/19 1 CG.
Graphics: Conceptual Model
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 3: Three Dimensions Ed Angel Professor of Computer Science,
1 Programming with OpenGL Part 2: Complete Programs.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
31/1/2006Based on: Angel (4th Edition) & Akeine-Möller & Haines (2nd Edition)1 CSC345: Advanced Graphics & Virtual Environments Lecture 2: Introduction.
Introduction to Graphics Programming. Graphics API.
Graphics Graphics Korea University kucg.korea.ac.kr Graphics Programming 고려대학교 컴퓨터 그래픽스 연구실.
CSC Graphics Programming Budditha Hettige Department of Statistics and Computer Science.
Introduction to Graphics Programming. Graphics: Conceptual Model Real Object Human Eye Display Device Graphics System Synthetic Model Synthetic Camera.
Computer Graphics I, Fall Programming with OpenGL Part 2: Complete Programs.
OpenGL CS418 Computer Graphics John C. Hart. OpenGL: Event-driven How in OpenGL? Programmer registers callback functions Callback function called when.
INTRODUCTION TO OPENGL
Computer Graphics (Fall 2003) COMS 4160, Lecture 5: OpenGL 1 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
Chapter (2)1 Computer Graphics - Chapter 2 Graphics Programming Objectives are to learn about: An example: The Sierpinski Gasket The OpenGL API Primitives.
Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran
The Human Visual System vs The Pinhole camera
Graphics Programming Chun-Yuan Lin CG 2018/5/15.
Course code:10CS65 | Computer Graphics and Visualization
Programming with OpenGL Part 2: Complete Programs
Materi Anatomi OpenGL Fungsi GLUT Posisi Kamera Proyeksi
Programming with OpenGL Part 3: Three Dimensions
OpenGL API 2D Graphic Primitives
Programming with OpenGL Part 2: Complete Programs
OpenGL (Open Graphics Library) Mr. B.A.Swamy Assistant Professor Dept of CSE.
Lab 3 Geometric Drawing Lab 3 Geometric Drawing.
Drawing in the plane 455.
Programming with OpenGL Part 3: Three Dimensions
Introduction to OpenGL
Interactive Computer Graphics Graphics Programming
Chapter 2 Computer Graphics and Visualization SSE, Mukka
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 3: Three Dimensions
Programming with OpenGL Part 2: Complete Programs
Angel: Interactive Computer Graphics5E © Addison-Wesley 2009
Programming with OpenGL Part 3: Three Dimensions
Angel: Interactive Computer Graphics5E © Addison-Wesley 2009
Presentation transcript:

Basic of computer graphics with OpenGL

Handful graphics function  OpenGL :  by silicon graphics  PHIGS :  Programmer’s Hierarchical Graphics System  GKS :  Graphic Kernel System  JAVA-3D  By Sun micro-system  DirectX:Microsoft corp.

Former graphic model  Pen plotter model  Useful for drawing 2D large diagram  API ex. LOGO, GKS, and PostScript  Unsuitable for 3D model : need sophisticated math to user moveto(0,0); lineto(1,0); lineto(1,1); lineto(0,1); lineto(0,0); moveto(0,1); lineto(0.5,1.866); lineto(1.5,1.866); lineto(1.5, 0.866); lineto(1,0); moveto(1,1); lineto(1.5, 1.866);

Coordinate Systems  CG system is unable define exactly unit like cm, inch etc  CG is a device independent system  Current coordinate is user coordinate = world coordinate  It should be match with CRT coordinate system (Raster coordinate)

Graphic function properties  7 groups of function  Primitive: What is object ?  low level objects or atomic entities, ex. point, polygon etc,  Attribute  How the appear: fill, bold character  Viewing  How we saw the image  Transformation  Transform of object: rotate, move  Input  Deal with the devices: keyboard, mouse etc.  Control function  Multiwindow, multiprocessing environment handling.  Inquiry function  Information providing for different API

Pipeline and State Machine  Entire graphic system thinking as a state machine  There are 2 types of Graphic functions  thing that define primitives  thing that changes the state

The OpenGL Interface  Begin with “gl”  Stored in library and referred to as GL  There are  Graphics Utility Library (GLU)  GLU Toolkit (GLUT)  GLX or WGL : glue for GL to OS  Defined in standard header folder “GL” filename “glut.h”

Primitives and Attributes  API should contain small set of primitives that every hardware can be supported  Ex. Line, polygons, text  Variety of primitive such as circle, curves, surface and solids able to build sophisticated object but few hardware supported  OpenGL takes an intermediate  Support 2 classes of primitives  Geometric primitives : pass through a geometric pipeline  Raster primitives: pass through pixel pipeline

 Geometric  Able to manipulated  Raster  Lack of geometric properties

Let’s have a look at 2D Modeling  Special case of 3D  Suppose z=0, every point refer to (x, y,0)  Generally object created from set points  In graphics system, the word “vertex” more preferred that “point”  OpenGL function form glVertex*(); where *: nt or ntv, 2 or 3 characters form n : number of dimension ( 2, 3 or 4) t : data type (ingeter, float, double, v for pointer)  Ex. glVertex2i(); /* vertex for 2D integer type*/  The data type may change to GL type instead of C  Ex. GLfloat = float in C  Note:  All of them have already defined in header fine

OpenGL Object form  Defined object in glBegin- glEnd loop  2 kinds of primitives that is used to defined object  No interior, eg. points, line  have surface, eg. polygon glBegin(type); glVertex*(…);. glEnd(); Difference type of object form C command for defining object

Polygon Basics  Close object that has interior  Able to use as curve surface  Number of generated polygons per time is used as graphic performance  Display either only edges or fill  Correct properties should be simple, convex, and flat  3D polygon is unnecessarily flat Filled objects polygons displaying simple polygon nonsimple polygon convex property

Convex object properties  3D convex object: 3 vertices are not collinear  Safe for rendering if use triangle  Hardware and software often support

Types of Polygon  GL_POLYGONS  Edges are perform line loop and close  Edges has no with  define either fill or edges using glPolygonMode  If both, draw twice

Special types polygon  Triangles and Quadrilaterals (GL_TRIANGLES, GL_QUADS)  Strips and Fans (GL_TRIANGLE_STRIP, GL_QUAD_STRIP, GL_TRIANGLE_FAN)

Sample object: Generating a Sphere  assign to be polygons and used GL_QUAD_STRIP  Use longitude and latitude schemes for the middle body  For pole uses GL_TRIANGLE_FAN float C= PI/180.0; //degrees to radians, M_PI = … for (float phi = -80.0; phi <= 80.0; phi += 20.0) { glBegin(GL_QUAD_STRIP); for (float theta = ; theta <= 180.0; theta += 20.0) { float x=sin(c*theta)*cos(c*phi); float y=cos(c*theta)*cos(c*phi); float z=sin(c*phi); glVertex3d(x,y,z); x=sin(c*theta)*cos(c*(phi+20.0)); y=cos(c*theta)*cos(c*(phi+20.0)); z=sin(c*(phi+20.0)); glVertex3d(x,y,z); } glEnd(); }

x=y=0; // North pole modeling z = 1; glBegin(GL_TRIANGLE_FAN); glVertex3d(x,y,z); c=M_Pi/180.0; z=sin(c*80.0); for (theta=-180.0; theta<=180.0;theta+=20.0) { x=sin(c*theta)*cos(c*80.0); y=cos(c*theta)*cos(c*80.0); glVertex3d(x,y,z); } glEnd(); x=y=0; // South pole modeling z=-1: glBegin(GL_TRIANGLE_FAN); glVertex3d(x,y,z); z = -sin(c*80.0); for(theta = ; theta <= 180.0; theta=20.0) { x=sin(c*theta)*cos(c*80.0); y=cos(c*theta)*cos(c*80.0); glVertex3d(x,y,z); } glEnd();

Today topic  fonts  attributes  color system  drawing a graphic with OpenGL

Text 2 types of text  Stroke Text  Constructed via using graphic primitives  Able to transform like other primitives  Raster Text  Character are defined as rectangle of bits block

 Stroke text  Consume a lot of memories  Postscript as an example  Raster text  Rapidly be placed in buffer by using bit-block-transfer (bitblt) operation  Operate only character sizing  Often store in ROM (hardware)  Portability is limited by particular font  GLUT provide 8x8 pixels function  glutBitmapCharacter(GLUT_BITMAP_8_BY_13, C) C: ASCII character number  Character is placed in the present position of screen

Curved Objects  Create by using 2 approach  Use the primitive except points  n side polygon instead of circle  Approximate sphere with polyhedron  Curved surface by a mesh of convex polygon  Use mathematical definition  Quadric surfaces and parametric polynomial curved and surfaces  example:  Define sphere by center and a point on surface  Cubic Polynomial is defined by 4 points  OpenGL able to do both

Attributes  About how primitive display  Line : display color, type of line (dash, solid)  Concern with immediate mode: display as soon as they are defined

Color  Most interesting of perception and computer graphics  Base on three color theory  If using additive color model - c = T 1 R+T 2 G+T 3 B  C: color that we trying to match  T1, T2, T3: strength of intensity, the tristimulus value

Human Visual System  Our visual system do a continuous perception  Depends on 3 types of cone cell  Visually indistinguishable if they have the same tristimulus value  CRT is an example of additive color system A i : brain perception value S i : cone cell sensitivity Viewing a point as a color solid cube

Subtractive color model  The complementary of additive color model  Start with white surface  If white light hit the surface, color will be absorb except the object color which are reflect  Ex. painting and printing  Complementary color: cyan, magenta, yellow additive color model subtractive color model

RGB-color model  Use separate buffer for each color  Each pixel has 3 bytes (24 bits) for each color  16 Million shade of color  OpenGL function  glColor3f(r, g, b);  ex. Red  glColor3f(1.0, 0.0, 0.0);

RGBA, the 4 color model  A: Alpha channel  Store in frame buffer like RGB  For creating effect ex. fog, combining images.  OpenGL treat as opacity or transparency  Ex. OpenGL command for 4 color model  glClearColor(1.0, 1.0, 1.0, 1.0);  White color and opaque

Indexed Color  Difficult to support in hardware  Higher memory requirements but now memory is cheaper  Use color tray of artist as principle  Infinite color can be produced from different quantity of primary colors

OpenGL indexed color function glIndex(element);  Select color out of table glutSetcolor(int color, GLfloat red, GLfloat blue, GLfloat green);  Set color entry to map the color table

Color Attributes  For RGB mode glClearColorglClearColor(1.0, 1.0, 1.0); /* clear to white */ glColor3f(1.0, 0.0, 0.0); /* setting point to red */ glPointSize(2.0); /* 2 pixel wide */ Note: If 2 display differ in pixel size, rendered images may appear slightly different

Viewing  Method for objects appear on screen  Use synthetic camera concept  Fix lens and fix location  Picture would be distort like real world  If we need to take an elephant picture, camera should far enough to take all information

2D Viewing  Base on the 2D rectangular area  Know as viewing rectangle or clipping rectangle  Be a special case of 3D viewing ex. plane at z=0  Default in 2x2x2 volume, origin in the center and bottom-left corner is at (-1.0, -1.0)

Orthographic View  2D view the orthographic projection of 3D  Function void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); // near, far: distance which are measured from camera /* orthographic projection from 3D */ void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); /* 2D equivalent to glOrtho but near and far set to -1.0, 1.0 */  Unlike camera, it is able to view behind object

Matrix Modes  Between graphic pipeline state, any transformation  2 important matrices:  model-view  Projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2d(0.0, 500.0, 0.0, 500.0); glMatrixMode(GL_MODELVIEW);

Control function  Concern about software environment between software and platform  Different platform will have different interfacing  GLUT also provide the utility : see further

Windows interfacing  Window : a rectangular area of our display, max = CRT screen  Window default origin: (0,0) at lower-left corner like CRT but mouse at top-left  OpenGL function (GLUT function) for window glutInit (int *argcp, char **argv); glutCreateWindow(char *title); /* given the window title */

Change the display setup glutInitDisplayMode(GLUT_RGB| GLUT_DEPTH | GLUT_DOUBLE); GLUT_RGB: define RGB color mode GLUT_DEPTH: a depth buffer for hidden-surface removal GLUT_DOUBLE: number of buffer Double/Single default: RGB color, no hidden surface removal, single buffering glutInitWindowSize(480, 640); glutInitWindowPosition(0,0)

Aspect ratio  Ratio of rectangle’s width to its height  If glOrtho and glutInitWindowSize are not specified the same size, object are distort.

View port  A rectangular area of the display window  Setting a view port void glViewport(GLint x, GLint y, GLsizei w, GLsizei h);

The function: main, display and myinit  glutMainLoop(); /* begin an event-processing loop, let the window waiting for kill process */  void glutDisplayFunc(void *(func)(void)); /* call to the redisplay function name func */ #include void main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize(500, 500); glutInitWindowPosition(0, 0); glutCreateWindow("Simple OpenGL example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } Program template

Program structure consisting  myinit : setup user options to state variables dealing with viewing and attributes-parameters

Example program: Sierspinski Gasket Proceeding of Sierspinski 1. Pick an random initial point in triangle 2. Select vertex 3. Finding the halfway point between initial point and random vertex 4. Mark and display new point 5. Replace the initial point with this new point 6. Return to step 2

Pseudo code main() { Initialize_the_system(); Initialize_the_system(); for(some_number_of_points) { pt = generate_a_point(); display_the_point(pt);}cleanup();} Sierpinski gasket

Using array with OpenGL // For 3D vertex, 2D is a special case GLfloat vertex[3]; /* define array */ // Then we can use glVertex3fv(vertex);/* pass by reference */ // Defining geometric object in Begin and End fn. statement glBegin(GL_LINES); glVertex2f(x1, y1); glVertex2f(x2, y2); glEnd();

The same data able to define another object // define a pair of points glBegin(GL_POINTS); glVertex2f(x1, y1); glVertex2f(x2, y2); geEnd();

Using a 2 element array to carry a point // By defining new data type with 2 element array typedef GLfloat point2[2]; // point2[0] carry x data // point2[1] carry y data when use point2 vertices[3] ; // the members are vertices[0][0], vertices[1][0], vertices[2][0] // carry x value vertices[0][1], vertices[1][1], vertices[2][1] // carry y value point2 vertices[3] = {{0.0, 0.0}, {250.0, 500.0}, {500,0}}

 Thing need to do  Coloring  Locate the image  Define size  Window creating  Image clipping  Image duration 5000 random point 2D Sierspinski

Triangular gasket  There is no point in the middle triangle  The same observation can be applied to the other 3 triangles and so on  Another method to fill the area is use triangle polygon instead of point  Strategy  Start with a triangle which subdivide the area to 4 triangles  Remove the middle one  Repeat to other triangles until the size of the removing triangle is small enough. Let say 1 pixel  This is the recursive program  See program

typedef float point2[2];/* initial triangle */ point2 v[]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}}; void triangle( point2 a, point2 b, point2 c) { /* display one triangle */ glBegin(GL_TRIANGLES); glVertex2fv(a); glVertex2fv(b); glVertex2fv(c); glEnd(); } void divide_triangle(point2 a, point2 b, point2 c, int m) { /* triangle subdivision using vertex numbers */ point2 v0, v1, v2; int j; if (m>0) { for(j=0; j<2; j++) v0[j]=(a[j]+b[j])/2; for(j=0; j<2; j++) v1[j]=(a[j]+c[j])/2; for(j=0; j<2; j++) v2[j]=(b[j]+c[j])/2; divide_triangle(a, v0, v1, m-1); divide_triangle(c, v1, v2, m-1); divide_triangle(b, v2, v0, m-1); } else /* draw triangle at end of recursion */ triangle(a,b,c); }

void display(void) { glClear(GL_COLOR_BUFFER_BIT); divide_triangle(v[0], v[1], v[2], n); glFlush(); } with 4 level recursionwith 5 level recursion

3D Sierspinski gasket  Begin with tetrahedron instead triangle  Use 3D point point v[]={ { 0.0, 0.0, 1.0}, { 0.0, , }, { , , }, { , , } };

The hidden surface removal  Problem may happen if there is no relation between surface  Close opaque object should mask the far object  The part of far object which overlap with close object should remove  Z-buffer algorithm is a method to manipulate.

Exercises  Write a part of C program to define a unit circle object at position (1,1) using OpenGL command Hint: you may use primitive such as TRIANGLE_FANS, or others