Graphics Programming Basic of computer graphics with OpenGL.

51
Graphics Programming Basic of computer graphics with OpenGL

Transcript of Graphics Programming Basic of computer graphics with OpenGL.

Page 1: Graphics Programming Basic of computer graphics with OpenGL.

Graphics Programming

Basic of computer graphics with OpenGL

Page 2: Graphics Programming Basic of computer graphics with OpenGL.

Handful graphics function

OpenGL : by silicon graphics

PHIGS : Programmer’s Hierarchical Graphics System

GKS : Graphics Kernel System

JAVA-3D/JOGL By Sun micro-system

DirectX: Microsoft corp.

Page 3: Graphics Programming Basic of computer graphics with OpenGL.

Target 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 Display coordinate system

(Raster coordinate)

Page 4: Graphics Programming Basic of computer graphics with OpenGL.

Graphics 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

Page 5: Graphics Programming Basic of computer graphics with OpenGL.

Pipeline and State Machine Entire graphics system thinking as a state

machine There are 2 types of Graphics functions

Things that define primitives Things that changes the state

Page 6: Graphics Programming Basic of computer graphics with OpenGL.

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”

Page 7: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 8: Graphics Programming Basic of computer graphics with OpenGL.

Geometric Able to manipulated

Raster Lack of geometric properties

Page 9: Graphics Programming Basic of computer graphics with OpenGL.

The 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 formn : 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 <GL\glut.h>

Page 10: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 11: Graphics Programming Basic of computer graphics with OpenGL.

Polygon Basics

Close object that has interior Able to use as curve surface Number of generated polygons per time is used as

graphics performance Display either only edges or fill Correct properties should be simple, convex, and

flat 3D polygon is unnecessarily flat

Filled objectspolygons displaying simple polygon nonsimple polygon convex property

Page 12: Graphics Programming Basic of computer graphics with OpenGL.

Convex object properties

3D convex object: 3 vertices are not collinear

Safe for rendering if use triangle Hardware and software often support

Page 13: Graphics Programming Basic of computer graphics with OpenGL.

Polygon display mode

GL_POLYGONS Edges are perform line loop and close Edges has no with define either fill or edges using

glPolygonMode If both, draw twice

Page 14: Graphics Programming Basic of computer graphics with OpenGL.

Special types polygon

Triangles and Quadrilaterals(GL_TRIANGLES, GL_QUADS)

Strips and Fans (GL_TRIANGLE_STRIP, GL_QUAD_STRIP, GL_TRIANGLE_FAN)

Page 15: Graphics Programming Basic of computer graphics with OpenGL.

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 usesGL_TRIANGLE_FAN

C=M_PI/180.0; //degrees to radians, M_PI = 3.14159…for (phi = -80.0; phi <= 80.0; phi += 20.0) { glBegin(GL_QUAD_STRIP); for (theta = -180.0; theta <= 180.0; theta += 20.0) {

x=sin(c*theta)*cos(c*phi);y=cos(c*theta)*cos(c*phi);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();}

Page 16: Graphics Programming Basic of computer graphics with OpenGL.

x=y=0; // North pole modelingz = 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,z=-1; // South pole modelingglBegin(GL_TRIANGLE_FAN);

glVertex3d(x,y,z); 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();

Page 17: Graphics Programming Basic of computer graphics 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

Page 18: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 19: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 20: Graphics Programming Basic of computer graphics with OpenGL.

Attributes

About how primitive display Line : display color, type of line (dash,

solid) Concern with immediate mode: display as

soon as they are defined

Page 21: Graphics Programming Basic of computer graphics with OpenGL.

Color

Most interesting of perception and computer graphics

Base on three color theory If using additive color model

- c = T1R+T2G+T3B C: color that we trying to match T1, T2, T3: strength of intensity, the tristimulus value

Page 22: Graphics Programming Basic of computer graphics with OpenGL.

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

Ai: brain perception value

Si: cone cell sensitivity

Viewing a point as a color solid cube

( ) ( )i iA S C d

Page 23: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 24: Graphics Programming Basic of computer graphics with OpenGL.

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);

Page 25: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 26: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 27: Graphics Programming Basic of computer graphics with OpenGL.

OpenGL indexed color functionglIndex(element);

Select color out of table

glutSetcolor(int color, GLfloat red, GLfloat blue, GLfloat green); Set color entry to map the color table

Page 28: Graphics Programming Basic of computer graphics with OpenGL.

Color Attributes For RGB mode

glClearColor(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

Page 29: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 30: Graphics Programming Basic of computer graphics with OpenGL.

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 at the center and

bottom-left corner is at (-1.0, -1.0)

Page 31: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 32: Graphics Programming Basic of computer graphics with OpenGL.

Matrix Modes Between graphic pipeline states, any

transformation 2 important matrices:

model-view Projection

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 500.0, 0.0, 500.0);

glMatrixMode(GL_MODELVIEW);

Page 33: Graphics Programming Basic of computer graphics with OpenGL.

Control function Concern about software environment between

software and platform Different platform will have different

interfacing GLUT also provide the utility : see further

Page 34: Graphics Programming Basic of computer graphics with OpenGL.

Windows interfacing

Window : A rectangular area of our display, max = ScreenWindow default origin (0,0) at lower-left corner like Screen but mouse at top-leftOpenGL function (GLUT function) for window

glutInit (int *argcp, char **argv);

glutCreateWindow(char *title); /* given the window title */

Page 35: Graphics Programming Basic of computer graphics with OpenGL.

Display setupglutInitDisplayMode(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)

Page 36: Graphics Programming Basic of computer graphics with OpenGL.

Aspect ratio

Ratio of rectangle’s width to its height If glOrtho and glutInitWindowSize are not

specified the same size, object are distort.

Page 37: Graphics Programming Basic of computer graphics with OpenGL.

View port

A rectangular area of the display window

Setting a view portvoid glViewport(GLint x, GLint y, GLsizei w, GLsizei h);

Page 38: Graphics Programming Basic of computer graphics with OpenGL.

Service 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 <GL/glut.h>

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

Page 39: Graphics Programming Basic of computer graphics with OpenGL.

Program structure consisting myinit :

setup user options to state variables dealing with viewing and attributes-parameters

Page 40: Graphics Programming Basic of computer graphics with OpenGL.

Example program:Sierspinski Gasket

Proceeding of Sierspinski1. Pick a random initial point in triangle2. Select vertex3. Finding the halfway point between initial point

and random vertex4. Mark and display new point5. Replace the initial point with this new point6. Return to step 2

Page 41: Graphics Programming Basic of computer graphics with OpenGL.

Pseudo code

main() { Initialize_the_system();

for(some_number_of_points) {pt = generate_a_point();display_the_point(pt);

}cleanup();

}

Sierpinski gasket

Page 42: Graphics Programming Basic of computer graphics with OpenGL.

Array with OpenGL

// For 3D vertex, 2D is a special caseGLfloat vertex[3]; /* define array */// Then we can use glVertex3fv(vertex); /* pass by reference */

// Defining geometric object in Begin and End fn. statementglBegin(GL_LINES);

glVertex2f(x1, y1);glVertex2f(x2, y2);

glEnd();

Page 43: Graphics Programming Basic of computer graphics with OpenGL.

The same data able to define another object

// define a pair of pointsglBegin(GL_POINTS);

glVertex2f(x1, y1);glVertex2f(x2, y2);

geEnd();

Page 44: Graphics Programming Basic of computer graphics with OpenGL.

Using a 2 elements array to carry a point

// By defining new data type with 2 element arraytypedef GLfloat point2[2];// point2[0] carry x data// point2[1] carry y datawhen usepoint2 vertices[3] ; // that means 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}}

Page 45: Graphics Programming Basic of computer graphics with OpenGL.

Graphics Example Sierspinski

Thing need to do Coloring Locate the image Define size Window creating Image clipping Image duration

5000 random point 2D Sierspinski

Page 46: Graphics Programming Basic of computer graphics with OpenGL.

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

Page 47: Graphics Programming Basic of computer graphics with OpenGL.

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); }

Page 48: Graphics Programming Basic of computer graphics with OpenGL.

void display(void) { glClear(GL_COLOR_BUFFER_BIT);divide_triangle(v[0], v[1], v[2], n); glFlush();

}

with 4 level recursion with 5 level recursion

Page 49: Graphics Programming Basic of computer graphics with OpenGL.

3D Sierspinski gasket Begin with tetrahedron

instead triangle Use 3D point

point v[]={ { 0.0, 0.0, 1.0}, { 0.0, 0.942809, -0.33333}, {-0.816497, -0.471405, -0.333333}, { 0.816497, -0.471405, -0.333333}

};

Page 50: Graphics Programming Basic of computer graphics with OpenGL.

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.

Page 51: Graphics Programming Basic of computer graphics with OpenGL.

Exercises1. Write a part of C program to define a unit circle object at position (1,1)

using OpenGL command

1. Explain the algorithm that you use to draw

Hint: you may use primitive such as TRIANGLE_FANS, or others

2. Write 2 unit circles, one at (1,1) and the other at (-1,-1). The (1,1) circle use full surface shaded with red color and the other display in wire frame.

3. Space-filling curves have interested mathematicians for centuries. In the limit, these curves have infinite length, but they are confined to a finite rectangle and never cross themselves. Many of these curves can be generated iteratively. Consider the “rule” pictured in shown below that replaces a single line segment with four shorter segments. Write a program that starts with a triangle and iteratively applies the replacement rule to all the line segments. The object that you generate is called the Koch snowflake.