Jason Lawrence COS426 Precept Notes 2/16/04

Slides:



Advertisements
Similar presentations
Chapter 2: Graphics Programming
Advertisements

David Luebke5/16/2015 Administrivia l Back on track: canceling OpenGL lecture 2 l Assignment 1 –Greg Yukl found an alternate XForms site:
OpenGL (Graphics Library) Software Interface to graphics software Allows to create interactive programs that produce color images of moving 3D objects.
#4: OpenGL Implementation & Project 2 CSE167: Computer Graphics TAs: Alex Kozlowski & Cameron Chrisman UCSD, Winter 2006.
Shading in OpenGL Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 2: Complete Programs Ed Angel Professor of Computer Science,
OpenGL and Projections
CS 248 OpenGL Help Session CS248 Presented by Sean Walker
Computer Graphics (Spring 2008) COMS 4160, Lecture 14: OpenGL 3
OpenGL Tutorial Jason Lawrence COS426 Precept Notes 2/16/04.
Lighting & Material. Example 1/5 #include ” glut.h ” void display(); void reshape(int, int); void lighting(); int main(int argc, char** argv) { glutInit(&argc,
Development of Interactive 3D Virtual World Applications
3D Rendering with JOGL Introduction to Java OpenGL Graphic Library By Ricardo Veguilla
1 Graphics CSCI 343, Fall 2013 Lecture 20 Lighting and Shading III.
3D coordinate systems X Y Z Right-Hand Coordinate System X Y Z Left-Hand Coordinate System OpenGL uses this! Direct3D uses this!
1 OpenGL Basics A Graphics Standard ©Mel Slater, Anthony Steed
Graphics Architectures & OpenGL API Introduction Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical.
Introduction to OpenGL 1. 2 OpenGL A Graphics rendering API introduced in 1992 by Silicon Graphics Inc Provide the low-level functions to access graphics.
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 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Shading I Ed Angel Professor of Computer Science, Electrical and Computer Engineering,
Computer Science Term 1, 2006 Tutorial 2 Assignment 3 – The Virtual World.
Intro to OpenGL Transformations CS 445/645 Introduction to Computer Graphics David Luebke, Spring 2003.
OpenGL Color and Lighting 2003 Spring Keng Shih-Ling.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 Programming with OpenGL Review.
OpenGL Lighting Jian-Liang Lin 2002 Hidden-Surface Removal -1 Original Code: while (1) { get_viewing_point_from_mouse_position(); glClear(GL_COLOR_BUFFER_BIT);
Project 5 Lamp Shader Fri, Nov 7, 2003 Due Mon, Nov 17, 2003.
Chapters 5 2 March Classical & Computer Viewing Same elements –objects –viewer –projectors –projection plane.
NoufNaief.net TA: Nouf Al-harbi.
Introduction to OpenGL & HW1 Announcement 劉軒銘, 網媒所 碩二 ICG 2012 Fall.
1 Angel: Interactive Computer Graphics5E © Addison- Wesley 2009 Image Formation Fundamental imaging notions Fundamental imaging notions Physical basis.
1 Programming with OpenGL Part 2: Complete Programs.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
CS559: Computer Graphics Lecture 12: OpenGL - Transformation Li Zhang Spring 2008.
Graphics Graphics Korea University kucg.korea.ac.kr Graphics Programming 고려대학교 컴퓨터 그래픽스 연구실.
Computer Graphics I, Fall Programming with OpenGL Part 2: Complete Programs.
OpenGL CS418 Computer Graphics John C. Hart. OpenGL Based on GL (graphics library) by Silicon Graphics Inc. (SGI) Advantages: Runs on everything, including.
OpenGL CS418 Computer Graphics John C. Hart. OpenGL: Event-driven How in OpenGL? Programmer registers callback functions Callback function called when.
CS380 LAB II OpenGL Donghyuk Kim Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [
CSC Graphic Programming Lecture 2 OpenGL Lightning.
1 Dr. Scott Schaefer Lighting. 2/49 Lighting/Illumination Color is a function of how light reflects from surfaces to the eye Global illumination accounts.
CSC Graphics Programming
Administrivia Back on track: canceling OpenGL lecture 2 Assignment 1
3D Computer Graphics (3080/GV10) Week 5-6 Tutorial 3
Reference1. [OpenGL course slides by Rasmus Stenholt]
Programming with OpenGL Part 2: Complete Programs
Materi Anatomi OpenGL Fungsi GLUT Posisi Kamera Proyeksi
OpenGL API 2D Graphic Primitives
Models and Architectures
Programming with OpenGL Part 2: Complete Programs
OpenGL (Open Graphics Library) Mr. B.A.Swamy Assistant Professor Dept of CSE.
OpenGL A Brief Overview.
Models and Architectures
Models and Architectures
Introduction to Computer Graphics with WebGL
Lab 3 Geometric Drawing Lab 3 Geometric Drawing.
Lighting and Shading Lab 8:.
CSC461: Lecture 24 Lighting and Shading in OpenGL
Introduction to OpenGL
Models and Architectures
Lighting – Material Properties
OpenGL program.
Computer Graphics 4Practical Lesson
Models and Architectures
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 2: Complete Programs
Lighting and Shading Lab 8:.
Programming with OpenGL Part 2: Complete Programs
OpenGL A Brief Overview.
Presentation transcript:

Jason Lawrence COS426 Precept Notes 2/16/04 OpenGL Tutorial Jason Lawrence COS426 Precept Notes 2/16/04

OpenGL IS an API OpenGL IS nothing more than a set of functions you call from your program (think of as collection of .h file(s)). Hides the details of the display adapter, operating system, etc. Comprises several libraries with varying levels of abstraction: GL, GLU, and GLUT

OpenGL Hierarchy Several levels of abstraction are provided GL GLU Lowest level: vertex, matrix manipulation glVertex3f(point.x, point.y, point.z) GLU Helper functions for shapes, transformations gluPerspective( fovy, aspect, near, far ) GLUT Highest level: Window and interface management glutSwapBuffers()

OpenGL Implementations OpenGL IS an API (think of as collection of .h files): #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Windows, Linux, UNIX, etc. all provide a platform specific implementation. Windows: opengl32.lib glu32.lib glut32.lib Linux: -l GL -l GLU –l GLUT

OpenGL API As a programmer, you need to do the following things: Specify the location/parameters of camera. Specify the geometry (and appearance). Specify the lights (optional). OpenGL will compute the resulting 2D image!

OpenGL Conventions Many functions have multiple forms: glVertex2f, glVertex3i, glVertex4dv, etc. Number indicates number of arguments Letters indicate type f: float, d: double, ub: unsigned byte, etc. ‘v’ (if present) indicates a single pointer argument glVertex3f(point.x, point.y, point.z) glVertex3fv(point)

OpenGL: Camera Two things to specify: Physical location of camera in the scene (MODELVIEW matrix in OpenGL). Where is the camera? Which direction is it pointing? What is the orientation of the camera? Projection properties of the camera (PROJECTION matrix in OpenGL): Depth of field? Field of view in the x and y directions?

OpenGL: Camera Coordinate-systems are represented as matrices in OpenGL. Think of camera as implying a coordinate-system centered at its image plane. Therefore, specifying this matrix implies specifying the physical properties of the camera.

OpenGL: MODELVIEW Point p in world is: (MODELVIEW * p) glMatrixMode(GL_MODELVIEW); // Specify matrix mode glLoadIdentity(); // Clear modelview matrix //Utility function provided by the GLU API (included with OpenGL) gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz); Point p in world is: (MODELVIEW * p) in camera coord-sys!!! y p Camera up = y’ z’ eye center = (0,0,0) x’ x World z

OpenGL: MODELVIEW World coord-sys: Camera coord-sys:

OpenGL: PROJECTION Intrinsic (optical) properties of camera: far near center fov x z y

OpenGL: PROJECTION glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fovy, aspect, near, far); z Camera viewport: far aspect = w/h h y w near x

OpenGL: Setting Camera Assume window is widthxheight: void SetCamera() { glViewport(0, 0, width, height); /* Set camera position */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(m_vEye[0], m_vEye[1], m_vEye[2], m_vRef[0], m_vRef[1], m_vRef[2], m_vUp[0], m_vUp[1], m_vUp[2]); /* Set projection frustrum */ glMatrixMode(GL_PROJECTION); gluPerspective(m_fYFOV, width / height, m_fNear, m_fFar); }

OpenGL: Geometry Specify geometry using primitives: triangles, quadrilaterals, lines, etc…

OpenGL: Geometry Specify geometry using primitives: triangles, quadrilaterals, lines, points, etc…

OpenGL: Geometry Specify geometry using primitives: triangles, quadrilaterals, lines, points, etc…

OpenGL: Geometry Specify geometry using primitives: triangles, quadrilaterals, lines, points, etc…

OpenGL: Triangle Mesh Represent the surface of an object by a collection of oriented triangles: 2 Specify vertices ccwise around normal!!!! normal 1

OpenGL: glBegin()…glEnd() Geometry passed btwn glBegin(.), glEnd(.)!!! glBegin(GL_TRIANGLES); for (int i=0; i<ntris; i++) { glColor3f(tri[i].r0,tri[i].g0,tri[i].b0); // Color of vertex glNormal3f(tri[i].nx0,tri[i].ny0,tri[i].nz0); // Normal of vertex glVertex3f(tri[i].x0,tri[i].y0,tri[i].z0); // Position of vertex … glColor3f(tri[i].r2,tri[i].g2,tri[i].b2); glNormal3f(tri[i].nx2,tri[i].ny2,tri[i].nz2); glVertex3f(tri[i].x2,tri[i].y2,tri[i].z2); } glEnd(); // Sends all the vertices/normals to the OpenGL library Notice that we specify a different normal for each vertex!!! This will be clear when we talk about lighting!!!

OpenGL: glBegin()…glEnd() OpenGL supports many primitives: glBegin(GL_LINES); glBegin(GL_QUADS); glBegin(GL_POLYGON); Use GL_LINES to specify a line in 3D space (such as a ray!!!). All vertices can have a normal (we will see why next!).

OpenGL: Lighting OpenGL computes the color at each vertex with a shading calculation: color=ambient; for (int i=0; i<nlights; i++) color += (diffuse + specular * dot(n,h)shine) * cos(θin) * light_color[i]; n h h = norm(light+camera) camera light argmax(dot(n,h)): h=n! θin

OpenGL: Lighting GLfloat mat_diffuse[4] = {0.75, 0.75, 0.75, 1.0}; GLfloat mat_specular[4] = {0.55, 0.55, 0.55, 1.0}; GLfloat mat_shininess[1] = {80}; glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); GLfloat light0_ambient[4] = { 0.0, 0.0, 0.0, 1.0}; GLfloat light0_color[4] = { 0.4, 0.4, 0.4, 1.0 }; glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color); glLightfv(GL_LIGHT0, GL_SPECULAR, light0_color); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING);

OpenGL: Lighting GLfloat mat_diffuse[4] = {0.75, 0.75, 0.75, 1.0}; GLfloat mat_specular[4] = {0.55, 0.55, 0.55, 1.0}; GLfloat mat_shininess[1] = {80}; glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); GLfloat light0_ambient[4] = { 0.0, 0.0, 0.0, 1.0}; GLfloat light0_color[4] = { 0.4, 0.4, 0.4, 1.0 }; glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color); glLightfv(GL_LIGHT0, GL_SPECULAR, light0_color); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING);

OpenGL: Lighting There are two “shading modes” in OpenGL: Flat shading: entire face is the color computed at the 0th vertex. Gouraud (“smooth”) shading: color computed at each vertex and interpolated across polygon.

OpenGL: Flat Shading glShadeModel(GL_FLAT);

OpenGL: Flat Shading glShadeModel(GL_SMOOTH);

OpenGL: Lighting is Optional! Lighting is an option! glEnable(GL_LIGHTING); glDisable(GL_LIGHTING); When disabled, the color of each vertex is directly glColor3f(r,g,b). Do not need lighting when debugging your ray tracer.

GLUT GLUT is a very simple API that supports creating GUI+OpenGL apps. http://www.xmission.com/~nate/glut.html

GLUT Call these functions in your from main: /* Initialize glut engine */ glutInit(&argc,argv); glutInitWindowPosition(100,100); glutInitWindowSize(window_width,window_height); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); main_window = glutCreateWindow(“Ray Viewer"); /* Register callbacks */ glutDisplayFunc(MainRedraw); // Main redraw function /* Run the interactive interface */ glutMainLoop();

GLUT: MainRedraw void MainRedraw() { glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); SetCamera(); DrawGeometry(); glutSwapBuffers(); // Update the screen }

GLUT: Example Skeleton code for a simple mesh viewer can be found at: http://www.cs.princeton.edu/~jlawrenc/cos426/mview.zip The program reads a “simple mesh” file format. The zip file includes several examples.

GLUT: Example

OpenGL: Resources Textbook! Nate Robbins OpenGL tutorials: http://www.xmission.com/~nate/tutors.html