CIS 441/541: Introduction to Computer Graphics Lecture 14: OpenGL Basics

Similar documents
Programming with OpenGL Part 1: Background

Early History of APIs. PHIGS and X. SGI and GL. Programming with OpenGL Part 1: Background. Objectives

Models and Architectures. Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

Introduction to Computer Graphics with WebGL

Models and Architectures

Introduction to OpenGL Week 1

Objectives. Image Formation Revisited. Physical Approaches. The Programmer s Interface. Practical Approach. Introduction to OpenGL Week 1

CS450/550. Pipeline Architecture. Adapted From: Angel and Shreiner: Interactive Computer Graphics6E Addison-Wesley 2012

API Background. Prof. George Wolberg Dept. of Computer Science City College of New York

Computer Graphics. Bing-Yu Chen National Taiwan University

Lecture 2 CISC440/640 Spring Department of Computer and Information Science

Programming with OpenGL Part 1: Background

Models and Architectures. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

Introduction to OpenGL

Today s Agenda. Basic design of a graphics system. Introduction to OpenGL

OUTLINE. Learn the basic design of a graphics system Introduce pipeline architecture Examine software components for a graphics system

Drawing Primitives. OpenGL basics

Graphics Programming

LECTURE 02 OPENGL API

Computer Graphics and Visualization. Graphics Systems and Models

CSE4030 Introduction to Computer Graphics

Programming using OpenGL: A first Introduction

OpenGL Introduction Computer Graphics and Visualization

Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

GL_COLOR_BUFFER_BIT, GL_PROJECTION, GL_MODELVIEW

Computer Graphics - Chapter 1 Graphics Systems and Models

3D computer graphics: geometric modeling of objects in the computer and rendering them

INTRODUCTION. Slides modified from Angel book 6e

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

Programming with OpenGL Part 2: Complete Programs Computer Graphics I, Fall

Computer Graphics (Basic OpenGL)

OPEN GL BACKGROUND. Objectives. Early History of APIs. SGI and GL. PHIGS and X. Modified from Angel 6e book slides

CHAPTER 1 Graphics Systems and Models 3

Lectures OpenGL Introduction

To Do. Computer Graphics (Fall 2008) Course Outline. Course Outline. Methodology for Lecture. Demo: Surreal (HW 3)

Computer Graphics, Chapt 08

Lecture 4 of 41. Lab 1a: OpenGL Basics

Intro to OpenGL III. Don Fussell Computer Science Department The University of Texas at Austin

VR-programming tools (procedural) More VRML later in this course! (declarative)

OpenGL and GLUT. COMP413 Computer Graphics. School of Computer Sci. & Eng. Kyungpook National University, Korea. Spring Semester, 2016

Comp 410/510 Computer Graphics Spring Programming with OpenGL Part 2: First Program

ERKELEY DAVIS IRVINE LOS ANGELES RIVERSIDE SAN DIEGO SAN FRANCISCO EECS 104. Fundamentals of Computer Graphics. OpenGL

Exercise 1 Introduction to OpenGL

CS 4204 Computer Graphics

OpenGL/GLUT Intro. Week 1, Fri Jan 12

SOURCES AND URLS BIBLIOGRAPHY AND REFERENCES

Teacher Assistant : Tamir Grossinger Reception hours: by - Building 37 / office -102 Assignments: 4 programing using

COMP 371/4 Computer Graphics Week 1

CMSC 425: Lecture 4 More about OpenGL and GLUT Tuesday, Feb 5, 2013

Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Lecture 2 5 Aug 2004

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

6.837 Introduction to Computer Graphics Assignment 5: OpenGL and Solid Textures Due Wednesday October 22, 2003 at 11:59pm

Basic Graphics Programming

CS 4620 Program 3: Pipeline

Computer Graphics I Lecture 11

An Overview GLUT GLSL GLEW

Pipeline Operations. CS 4620 Lecture 14

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane

Rendering Pipeline/ OpenGL

Graphics Hardware and OpenGL

CS451Real-time Rendering Pipeline

Announcements OpenGL. Computer Graphics. Autumn 2009 CS4815

Graphics Programming. August 31, Programming of the Sierpinski gasket. Programming with OpenGL and C/C++

Rasterization Overview

Orthogonal Projection Matrices. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

Graphics Pipeline & APIs

Computer Graphics (CS 4731) OpenGL/GLUT(Part 1)

2: Introducing image synthesis. Some orientation how did we get here? Graphics system architecture Overview of OpenGL / GLU / GLUT

OpenGL refresher. Advanced Computer Graphics 2012

Precept 2 Aleksey Boyko February 18, 2011

Announcements OpenGL. Computer Graphics. Spring CS4815

Computer Graphics. Chapter 3 Computer Graphics Software

Graphics Pipeline & APIs

Basic Graphics Programming

Programming with OpenGL Part 3: Three Dimensions

Rendering. Part 1 An introduction to OpenGL

CS 543 Lecture 1 (Part II): Intro to OpenGL and GLUT (Part I) Emmanuel Agu

Surface Graphics. 200 polys 1,000 polys 15,000 polys. an empty foot. - a mesh of spline patches:

11/1/13. Basic Graphics Programming. Teaching Assistant. What is OpenGL. Course Producer. Where is OpenGL used. Graphics library (API)

Course Title: Computer Graphics Course no: CSC209

QUESTION BANK 10CS65 : COMPUTER GRAPHICS AND VISUALIZATION

Interactive Computer Graphics A TOP-DOWN APPROACH WITH SHADER-BASED OPENGL

Draw the basic Geometry Objects. Hanyang University

CSE528 Computer Graphics: Theory, Algorithms, and Applications

CS452/552; EE465/505. Clipping & Scan Conversion

CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2015

QUESTION 1 [10] 2 COS340-A October/November 2009

1.2 Basic Graphics Programming

Advanced Computer Graphics (CS & SE )

Blue colour text questions Black colour text sample answers Red colour text further explanation or references for the sample answers

CS452/552; EE465/505. Intro to Lighting

Lecture 4 Advanced Computer Graphics (CS & SE )

Pipeline Operations. CS 4620 Lecture 10

GLUT. What is OpenGL? Introduction to OpenGL and GLUT

Lecture 2. Determinants. Ax = 0. a 11 x 1 + a 12 x a 1n x n = 0 a 21 x 1 + a 22 x a 2n x n = 0

The Traditional Graphics Pipeline

CSC 8470 Computer Graphics. What is Computer Graphics?

Image Formation. Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

CS 543 Lecture 1 (Part 3) Prof Emmanuel Agu. Computer Science Dept. Worcester Polytechnic Institute (WPI)

Transcription:

CIS 441/541: Introduction to Computer Graphics Lecture 14: OpenGL Basics Oct. 26th, 2016 Hank Childs, University of Oregon

Announcements OH Hank: Weds 1-2, Thursday 11-12 Dan: Weds 4-530, Thursday 930-11 Emails / Piazza I declare email bankruptcy on all 441 correspondences over the weekend n Please re-send or come to OH

Outline Review Project 1F OpenGL Basics

Outline Review Project 1F OpenGL Basics

View Transformation v = +1 v = -1 w = -1 w = +1 The viewing transformation is not a combination of simple translations, rotations, scales or shears: it is more complex.

Derivation of Viewing Transformation I personally don t think it is a good use of class time to derive this matrix. Well derived at: http://www.idav.ucdavis.edu/education/ GraphicsNotes/Viewing-Transformation/Viewing- Transformation.html

The View Transformation Input parameters: (α, n, f) Transforms view frustum to image space cube View frustum: bounded by viewing pyramid and planes z=-n and z=-f Image space cube: -1 <= u,v,w <= 1 [cot(α/2) 0 0 0] [0 cot(α/2) 0 0] [0 0 (f+n)/(f-n) -1] [0 0 2fn/(f-n) 0] Cotangent = 1/tangent

Let s do an example Input parameters: (α, n, f) = (90, 5, 10) f=10 n=5 α=90 [cot(α/2) 0 0 0] [0 cot(α/2) 0 0] [0 0 (f+n)/(f-n) -1] [0 0 2fn/(f-n) 0]

Let s do an example Input parameters: (α, n, f) = (90, 5, 10) n=5 α=90 f=10 [1 0 0 0] [0 1 0 0] [0 0 3-1] [0 0 20 0]

Let s do an example Input parameters: (α, n, f) = (90, 5, 10) n=5 α=90 f=10 Let s multiply some points: (0,7,-6,1) (0,7,-8,1) [1 0 0 0] [0 1 0 0] [0 0 3-1] [0 0 20 0]

Let s do an example Input parameters: (α, n, f) = (90, 5, 10) n=5 α=90 f=10 Let s multiply some points: (0,7,-6,1) = (0,7,-2,6) = (0, 1.16, -0.33) (0,7,-8,1) = (0,7,4,8) = (0, 0.88, 0.5) [1 0 0 0] [0 1 0 0] [0 0 3-1] [0 0 20 0]

Let s do an example Input parameters: (α, n, f) = (90, 5, 10) n=5 α=90 f=10 More points: (0,7,-4,1) = (0,7,-12,4) = (0, 1.75, -3) (0,7,-5,1) = (0,7,-15,3) = (0, 2.33, -1) (0,7,-6,1) = (0,7,-2,6) = (0, 1.16, -0.33) (0,7,-8,1) = (0,7,4,8) = (0, 0.88, 0.5) (0,7,-10,1) = (0,7,10,10) = (0, 0.7, 1) (0,7,-11,1) = (0,7,13,11) = (0,.63, 1.18) [1 0 0 0] [0 1 0 0] [0 0 3-1] [0 0 20 0]

View Transformation v = +1 v = -1 w = -1 w = +1 The viewing transformation is not a combination of simple translations, rotations, scales or shears: it is more complex.

(0,1.75, -3) (0,1.4, -1) View Transformation (0,1.16, -0.33) v = +1 (0,0.88,-0.5) (0,0.7,1) (0,0.63,1.18) More points: (0,7,-4,1) = (0,7,-12,4) = (0, 1.75, -3) (0,7,-5,1) = (0,7,-5,5) = (0, 1.4, -1) (0,7,-6,1) = (0,7,-2,6) = (0, 1.16, -0.33) (0,7,-8,1) = (0,7,4,8) = (0, 0.88, -0.5) (0,7,-10,1) = (0,7,10,10) = (0, 0.7, 1) (0,7,-11,1) = (0,7,13,11) = (0,.63, 1.18) v = -1 w = -1 w = +1 Note there is a non-linear relationship in Z.

How do we transform? For a camera C, Calculate Camera Frame From Camera Frame, calculate Camera Transform Calculate View Transform Calculate Device Transform Compose 3 Matrices into 1 Matrix (M) For each triangle T, apply M to each vertex of T, then apply rasterization/ zbuffer/phong shading

Outline Review Project 1F OpenGL Basics

Floating point precision (not review)

1F prompt will be updated to reflect this change

Project #1F (8%), Due Oct 30th Goal: add arbitrary camera positions Extend your project1e code Re-use: proj1e_geometry.vtk available on web (9MB), reader1e.cxx, shading.cxx. No Cmake, project1f.cxx New: Matrix.cxx, Camera.cxx

Project #1F, expanded Matrix.cxx: complete Methods: class Matrix { public: double A[4][4]; }; void TransformPoint(const double *ptin, double *ptout); static Matrix ComposeMatrices(const Matrix &, const Matrix &); void Print(ostream &o);

Project #1F, expanded Camera.cxx: you work on this class Camera { public: double double double double double near, far; angle; position[3]; focus[3]; up[3]; }; Matrix ViewTransform(void) {;}; Matrix CameraTransform(void) {;}; Matrix DeviceTransform(void) {;}; // Will probably need something for calculating Camera Frame as well Also: GetCamera(int frame, int nframes)

Project #1F, deliverables Same as usual, but times 4 4 images, corresponding to n GetCamera(0, 1000) n GetCamera(250,1000) n GetCamera(500,1000) n GetCamera(750,1000) If you want: Generate all thousand images, make a movie n Can discuss how to make a movie if there is time

Project #1F, game plan vector<triangle> t = GetTriangles(); AllocateScreen(); for (int i = 0 ; i < 1000 ; i++) { InitializeScreen(); Camera c = GetCamera(i, 1000); TransformTrianglesToDeviceSpace(); // involves setting up and applying matrices // if you modify vector<triangle> t, // remember to undo it later RenderTriangles() SaveImage(); }

Correct answers given for GetCamera(0, 1000) Camera Frame: U = 0, 0.707107, -0.707107 Camera Frame: V = -0.816497, 0.408248, 0.408248 Camera Frame: W = 0.57735, 0.57735, 0.57735 Camera Frame: O = 40, 40, 40 Camera Transform (0.0000000-0.8164966 0.5773503 0.0000000) (0.7071068 0.4082483 0.5773503 0.0000000) (-0.7071068 0.4082483 0.5773503 0.0000000) (0.0000000 0.0000000-69.2820323 1.0000000) View Transform (3.7320508 0.0000000 0.0000000 0.0000000) (0.0000000 3.7320508 0.0000000 0.0000000) (0.0000000 0.0000000 1.0512821-1.0000000) (0.0000000 0.0000000 10.2564103 0.0000000) Transformed 37.1132, 37.1132,37.1132, 1 to 0, 0,1 Transformed -75.4701, -75.4701,-75.4701, 1 to 0, 0,-1

Project #1F, pitfalls All vertex multiplications use 4D points. Make sure you send in 4D points for input and output, or you will get weird memory errors. Make sure you divide by w. Your Phong lighting assumed a view of (0,0,-1). The view will now be changing with each render and you will need to incorporate that view direction in your rendering.

Project #1F, pitfalls People often get a matrix confused with its transpose. Use the method Matrix::Print() to make sure the matrix you are setting up is what you think it should be. Also, remember the points are left multiplied, not right multiplied. Regarding multiple renderings: Don t forget to initialize the screen between each render If you modify the triangle in place to render, don t forget to switch it back at the end of the render

Project #1F (8%), Due Oct 30th Goal: add arbitrary camera positions

Project 1F: Making a Movie You can also generate 1000 images and use a movie encoder to make a movie (i.e., ffmpeg to make a mpeg) Could someone post a how to?

Project 1F: Shading We used viewdirection = (0, 0, -1) for 1E For 1F, we will do it right: Prior to transforming, you can calculate viewdirection n triangle vertex minus camera position n then call CalculateShading with correct viewdir n then associate shading value as a scale on the triangle n and then LERP that shading value across scanline

Outline Review Project 1F OpenGL Basics

Models and Architectures Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico 3 2

Objectives Learn the basic design of a graphics system Introduce pipeline architecture Examine software components for an interactive graphics system 3 3

Image Formation Revisited Can we mimic the synthetic camera model to design graphics hardware software? Application Programmer Interface (API) - Need only specify Objects Materials Viewer Lights But how is the API implemented? 3 4

Physical Approaches Ray tracing: follow rays of light from center of projection until they either are absorbed by objects or go off to infinity - Can handle global effects Multiple reflections Translucent objects - Slow - Must have whole data base available at all times Radiosity: Energy based approach - Very slow 3 5

Practical Approach Process objects one at a time in the order they are generated by the application - Can consider only local lighting Pipeline architecture application program display All steps can be implemented in hardware on the graphics card 3 6

Vertex Processing Much of the work in the pipeline is in converting object representations from one coordinate system to another - Object coordinates - Camera (eye) coordinates - Screen coordinates Every change of coordinates is equivalent to a matrix transformation Vertex processor also computes vertex colors 3 7

Projection Projection is the process that combines the 3D viewer with the 3D objects to produce the 2D image - Perspective projections: all projectors meet at the center of projection - Parallel projection: projectors are parallel, center of projection is replaced by a direction of projection 3 8

Primitive Assembly Vertices must be collected into geometric objects before clipping and rasterization can take place - Line segments - Polygons - Curves and surfaces 3 9

Clipping Just as a real camera cannot see the whole world, the virtual camera can only see part of the world or object space - Objects that are not within this volume are said to be clipped out of the scene 4 0

Rasterization If an object is not clipped out, the appropriate pixels in the frame buffer must be assigned colors Rasterizer produces a set of fragments for each object Fragments are potential pixels - Have a location in frame bufffer - Color and depth attributes Vertex attributes are interpolated over objects by the rasterizer 4 1

Fragment Processing Fragments are processed to determine the color of the corresponding pixel in the frame buffer Colors can be determined by texture mapping or interpolation of vertex colors Fragments may be blocked by other fragments closer to the camera - Hidden-surface removal 4 2

The Programmer s Interface Programmer sees the graphics system through a software interface: the Application Programmer Interface (API) 4 3

API Contents Functions that specify what we need to form an image - Objects - Viewer - Light Source(s) - Materials Other information - Input from devices such as mouse and keyboard - Capabilities of system 4 4

Object Specification Most APIs support a limited set of primitives including - Points (0D object) - Line segments (1D objects) - Polygons (2D objects) - Some curves and surfaces Quadrics Parametric polynomials All are defined through locations in space or vertices 4 5

Example type of object 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( ); location of vertex end of object definition 4 6

Lights and Materials Types of lights - Point sources vs distributed sources - Spot lights - Near and far sources - Color properties Material properties - Absorption: color properties - Scattering Diffuse Specular 4 7

Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico 4 8

Objectives Development of the OpenGL API OpenGL Architecture - OpenGL as a state machine Functions - Types - Formats Simple program 4 9

Early Graphics APIs IFIPS FKS PHIGS 5 0

SGI and GL Silicon Graphics (SGI) revolutionized the graphics workstation by implementing the pipeline in hardware (1982) To access the system, application programmers used a library called GL With GL, it was relatively simple to program three dimensional interactive applications 5 1

OpenGL The success of GL lead to OpenGL (1992), a platform-independent API that was - Easy to use - Close enough to the hardware to get excellent performance - Focus on rendering - Omitted windowing and input to avoid window system dependencies 5 2

OpenGL Evolution Originally controlled by an Architectural Review Board (ARB) - Members included SGI, Microsoft, Nvidia, HP, 3DLabs, IBM,. - Relatively stable Evolution reflects new hardware capabilities 3D texture mapping and texture objects Vertex programs - Allows for platform specific features through extensions - ARB replaced by Kronos 5 3

OpenGL Libraries OpenGL core library - OpenGL32 on Windows - GL on most unix/linux systems (libgl.a) OpenGL Utility Library (GLU) - Provides functionality in OpenGL core but avoids having to rewrite code Links with window system - GLX for X window systems - WGL for Windows - AGL for Macintosh 5 4

GLUT OpenGL Utility Toolkit (GLUT) - Provides functionality common to all window systems Open a window Get input from mouse and keyboard Menus Event-driven - Code is portable but GLUT lacks the functionality of a good toolkit for a specific platform No slide bars <GLUT no longer well maintained, we will use VTK> 5 5

OpenGL Architecture Immediate Mode geometry pipeline Polynomial Evaluator Per Vertex Operations & Primitive Assembly CPU Display List Rasterization Per Fragment Operations Frame Buffer Pixel Operations Texture Memory 5 6

OpenGL Functions Primitives - Points - Line Segments - Polygons Attributes Transformations - Viewing - Modeling Control (GLUT) Input (GLUT) Query } VTK 5 7

OpenGL State OpenGL is a state machine OpenGL functions are of two types - Primitive generating Can cause output if primitive is visible How vertices are processed and appearance of primitive are controlled by the state - State changing Transformation functions Attribute functions 5 8

Lack of Object Orientation OpenGL is not object oriented so that there are multiple functions for a given logical function - glvertex3f - glvertex2i - glvertex3dv Underlying storage mode is the same Easy to create overloaded functions in C++ but issue is efficiency 5 9

OpenGL function format function name dimensions glvertex3f(x,y,z) belongs to GL library x,y,z are floats glvertex3fv(p) p is a pointer to an array 6 0

OpenGL #defines Most constants are defined in the include files gl.h, glu.h and glut.h - Note #include <GL/glut.h> should automatically include the others - Examples - glbegin(gl_polygon) - glclear(gl_color_buffer_bit) include files also define OpenGL data types: GLfloat, GLdouble,. 6 1

A Simple Program Generate a square on a solid background 6 2

simple.c #include <GL/glut.h> void mydisplay(){ glclear(gl_color_buffer_bit); glbegin(gl_polygon); glvertex2f(-0.5, -0.5); glvertex2f(-0.5, 0.5); glvertex2f(0.5, 0.5); glvertex2f(0.5, -0.5); glend(); glflush(); } int main(int argc, char** argv){ glutcreatewindow("simple"); glutdisplayfunc(mydisplay); glutmainloop(); } 6 3

Event Loop Note that the program defines a display callback function named mydisplay - Every glut program must have a display callback - The display callback is executed whenever OpenGL decides the display must be refreshed, for example when the window is opened - The main function ends with the program entering an event loop VTK will be similar callback issued to render geometry 6 4

Defaults simple.c is too simple Makes heavy use of state variable default values for - Viewing - Colors - Window parameters Next version will make the defaults more explicit 6 5