28
Computer Graphics Computer Graphics - Graphics Programming - Graphics Programming - - Hanyang University Jong-Il Park

Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

Embed Size (px)

Citation preview

Page 1: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

Computer GraphicsComputer Graphics- Graphics Programming- Graphics Programming - -

Hanyang University

Jong-Il Park

Page 2: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Essential Functions in APIEssential Functions in API

Objects Viewer Light sources Material properties

Page 3: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

ObjectsObjects Defined by

Sets of vertices Relationship between a list of vertices and the object

Relationship Simple relationship

Line segments, rectangles, polygons, … Complex relationship

Circle defined by 3 points or center and one point

Primitive Points, line segments, polygons, text …

Page 4: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Eg. Triangle in OpenGLEg. Triangle in OpenGL

glBegin(GL_POLYGON);glVertex3f(0.0, 0.0, 0.0);glVertex3f(0.0, 1.0, 0.0);glVertex3f(0.0, 0.0, 1.0);

glEnd();

Page 5: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Viewer = Virtual CameraViewer = Virtual Camera

Necessary specifications Position Orientation Focal length Film plane

Page 6: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Eg. Viewer in OpenGLEg. Viewer in OpenGL

Independence

Viewer Objects

cf. Classical viewing techniques in architecture

gluLookAt(cop_x, cop_y, cop_z, at_x, at_y, at_z, …);// position and orientation

gluPerspective(field_of_view, aspect_ratio …);// lens, field of view..

Page 7: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Perspective vs. OrthographicPerspective vs. Orthographic

Perspective projection

Orthographic projection

Page 8: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

ViewportViewport

glViewport(x,y,w,h)

Page 9: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Modeling-Rendering ParadigmModeling-Rendering Paradigm

Modeling software Animation software Rendering software

M+A+R3D StudioSOFTIMAGEMAYA …

M+RRhinocerossolidThinking …

A+RArcRender …

Page 10: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Graphics ArchitectureGraphics Architecture

Early graphics systems

Display processors

Page 11: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Pipeline ArchitecturesPipeline Architectures

Principle

Throughput The rate at which the data flows through the system

Latency The time for a datum to pass through the system

Page 12: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Geometric PipelineGeometric Pipeline

Geometric processing Transformation

Concatenating Clipping Projection

Rasterization = scan-conversion

Page 13: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

OpenGL APIOpenGL API

Graphics functions Primitive functions Attribute functions Viewing functions Transformation functions Input functions Control functions

Page 14: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

OpenGL PipelineOpenGL Pipeline

Page 15: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

OpenGL Data TypesOpenGL Data Types

For portability Eg. glVertex2f() f: suffix standing for GLfloat

Suffix Typical C/C++ OpenGL type name

b signed char GLbyte

s short GLshort

i int or long GLint, GLsizei

f float GLfloat

d double GLdouble

ub unsigned char GLubyte

us unsigned short GLushort

ui unsigned int or long GLuint, GLenum

Page 16: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Primitives and AttributesPrimitives and Attributes Points and line-segment types

glBegin(type);glVertex*(…);…glVertex*(…);

glEnd();

Page 17: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

• Polygon types

Page 18: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Application StructureApplication Structure Configure and open window Initialize OpenGL state Register input callback functions

render resize input: keyboard, mouse, etc.

Enter event processing loop

Page 19: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

““Hello World” ExampleHello World” Example

#include <stdio.h> #include <GL/glut.h> void display(void) {

 glClear( GL_COLOR_BUFFER_BIT);  glColor3f(0.0, 1.0, 0.0);  glBegin(GL_POLYGON); glVertex3f(2.0, 4.0, 0.0); glVertex3f(8.0, 4.0, 0.0); glVertex3f(8.0, 6.0, 0.0); glVertex3f(2.0, 6.0, 0.0);  glEnd();  glFlush();

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

printf("hello world\n"); glutInit(&argc, argv); glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

  glutInitWindowPosition(100,100); glutInitWindowSize(300,300); glutCreateWindow ("square");

  glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0);

  glutDisplayFunc(display); glutMainLoop();

  return 0; }

#include <stdio.h>

#include <GL/glut.h>

int main(int argc, char **argv)

{ printf("hello world\n");

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE |

GLUT_RGB | GLUT_DEPTH);

Initialize GLUT and processes command

line options

Page 20: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

 

RGB red, green, and blue, typically 8 bits per pixel GLUT_RGB

Aalpha or accumulation buffer; used for compositing images

GLUT_RGBA

Z depth value, used for Z-buffer visibility testsGLUT_DEPTH

double buffer

extra copy of all buffers, used for smooth animationGLUT_DOUBLE

stencil buffer

several extra bits, useful in compositing imagesGLUT_STENCIL

glutInitDisplayMode();

Page 21: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

““Hello World” Example (2)Hello World” Example (2)

#include <stdio.h> #include <GL/glut.h> void display(void) {

 glClear( GL_COLOR_BUFFER_BIT);  glColor3f(0.0, 1.0, 0.0);  glBegin(GL_POLYGON); glVertex3f(2.0, 4.0, 0.0); glVertex3f(8.0, 4.0, 0.0); glVertex3f(8.0, 6.0, 0.0); glVertex3f(2.0, 6.0, 0.0);  glEnd();  glFlush();

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

printf("hello world\n"); glutInit(&argc, argv); glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

  glutInitWindowPosition(100,100); glutInitWindowSize(300,300); glutCreateWindow ("square");

  glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0);

  glutDisplayFunc(display); glutMainLoop();

  return 0; }

glutInitWindowPosition(100,100); glutInitWindowSize(300,300); glutCreateWindow ("square");

glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0);

• Set window position, size, and name And create a window

• Clear color (white) and Set the viewer

* GL_MODELVIEW

Page 22: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

““Hello World” Example (3)Hello World” Example (3)

#include <stdio.h> #include <GL/glut.h> void display(void) {

 glClear( GL_COLOR_BUFFER_BIT);  glColor3f(0.0, 1.0, 0.0);  glBegin(GL_POLYGON); glVertex3f(2.0, 4.0, 0.0); glVertex3f(8.0, 4.0, 0.0); glVertex3f(8.0, 6.0, 0.0); glVertex3f(2.0, 6.0, 0.0);  glEnd();  glFlush();

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

printf("hello world\n"); glutInit(&argc, argv); glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

  glutInitWindowPosition(100,100); glutInitWindowSize(300,300); glutCreateWindow ("square");

  glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0);

  glutDisplayFunc(display); glutMainLoop();

  return 0; }

glClear( GL_COLOR_BUFFER_BIT); // screen clear glColor3f(0.0, 1.0, 0.0); // set the color to G glBegin(GL_POLYGON); // draw glVertex3f(2.0, 4.0, 0.0); glVertex3f(8.0, 4.0, 0.0); glVertex3f(8.0, 6.0, 0.0); glVertex3f(2.0, 6.0, 0.0); glEnd(); glFlush(); // send all output to display

glutDisplayFunc(display); glutMainLoop();

• glutDisplayFunc() registers the call-back function.• glutMainLoop() hands execution control over to the glut library

• Display call-back function

Page 23: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Run and you getRun and you get

Page 24: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

SummarySummary

Essential ComponentsEssential Components

Main program main() function Display callback function Optionally, interaction function

Mouse callback function Keyboard callback function Reshape callback function

Page 25: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Interaction Interaction

glutMouseFunc(myMouse)registers myMouse() with the event that occurs when the

mouse button is pressed or released glutMotionFunc(myMovedMouse)

registers myMovedMouse() with the event that occurs when the mouse is moved while one of the buttons is pressed

glutKeyboardFunc(myKeyboard)Registers myKeyboard() with the event that occurs when

a keyboard key is pressed

Page 26: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Eg. Placing Dots with MouseEg. Placing Dots with Mouse

void myMouse(int button, int state, int x, int y){

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

drawDot(x,screenHeight –y);else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)

exit(-1);}

void drawDot(GLint x, GLint y){

glBegin(GL_POINTS); glVertex2i(x,y);glEnd();

}

Leftbutton draw a dotRightbutton terminate

Page 27: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Pen-Plotter ModelPen-Plotter Model

moveto(0,0);

lineto(1,0);

lineto(1,1);

lineto(0,1);

lineto(0,0);

•Used in early graphics systems•LOGO, GKS, PostScript…

Page 28: Computer Graphics - Graphics Programming - Hanyang University Jong-Il Park

            

Division of Electrical and Computer Engineering, Hanyang University

Homework #3Homework #3

2D Graphics Programming [OpenGL] Open a window with 480 lines x 640 pixels Build your own paint program capable of drawing dots,

lines, line strips, line loop, … Interaction: Use the mouse and the keyboard Hint: Follow the methods in Chap.3 of the textbook

Read Chap.4

[Due: 12 Oct.]