Display Lists. Conceptually similar to a graphics file. In client-server environment, display list is placed on server

Similar documents
Building Models. Objectives. Introduce simple data structures for building polygonal models. OpenGL vertex arrays. Vertex lists Edge lists

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

Building Models. Objectives Introduce simple data structures for building polygonal models. Vertex lists Edge lists

GEOMETRIC OBJECTS AND TRANSFORMATIONS I

Building Models. Prof. George Wolberg Dept. of Computer Science City College of New York

Graphics Output Primitives Hearn & Baker Chapter 3. Some slides are taken from Robert Thomsons notes.

UNIT 4 GEOMETRIC OBJECTS AND TRANSFORMATIONS-1

Lectures Display List

Better Interactive Programs. Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

Better Interactive Programs

Filled Area Primitives. CEng 477 Introduction to Computer Graphics METU, 2007

A display list is a group of OpenGL commands that have been stored for later execution.

Interaction Computer Graphics I Lecture 3

Display Lists in OpenGL

Building Models. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

Interaction. CSCI 480 Computer Graphics Lecture 3

CENG 477 Introduction to Computer Graphics. Graphics Hardware and OpenGL

OpenGL. Jimmy Johansson Norrköping Visualization and Interaction Studio Linköping University

Computer Graphics. Bing-Yu Chen National Taiwan University

CS452/552; EE465/505. Models & Viewing

Chapter 7 Display Lists

Computer Graphics CS 543 Lecture 4 (Part 2) Building 3D Models (Part 2)

9. Display Lists. Display lists optimize performance by caching and saving end results, thus avoiding many intermediate steps for

Computer Graphics. Prof. Feng Liu. Fall /14/2016

Modeling with Transformations

Modeling. Simulating the Everyday World

PESIT Bangalore South Campus Hosur road, 1km before Electronic City, Bengaluru -100 Department of Computer Science

Lecture 4. Interaction / Graphical Devices. CS 354 Computer Graphics Sunday, January 20, 13

SOURCES AND URLS BIBLIOGRAPHY AND REFERENCES

8 Three-Dimensional Object Representations. Chapter 8. Three-Dimensional Object Representations. Department of Computer Science and Engineering 8-1

Lecture 2 2D transformations Introduction to OpenGL

Computer Graphics and Visualization SYLLABUS COMPUTER GRAPHICS AND VISUALIZATION

EECE 478. Learning Objectives. Learning Objectives. Rasterization & Scenes. Rasterization. Compositing

3.2 Hierarchical Modeling

COMPUTER GRAPHICS AND VISUALIZATION. Subject Code: 10CS65 / 10IS665 I.A. Marks : 25 Hours/Week : 04 Exam Hours: 03 Total Hours : 52 Exam Marks: 100

CSE528 Computer Graphics: Theory, Algorithms, and Applications

CS559: Computer Graphics. Lecture 23: Shape Modeling Li Zhang Spring 2010

Input and Interaction

Exercise 1 Introduction to OpenGL

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

Hierarchical Modeling: Tree of Transformations, Display Lists and Functions, Matrix and Attribute Stacks,

Vertex Buffer Objects

Vertex Buffer Objects. Vertex Buffer Objects: The Big Idea

Computer graphics MN1

CSCI E-74. Simulation and Gaming

Polygonal Models. Overview. Simple Data Structures. David Carr Fundamentals of Computer Graphics Spring 2004 Based on Slides by E.

2D Drawing Primitives

Computer graphics MN1

RECITATION - 1. Ceng477 Fall

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

Computer Graphics. Prof. Feng Liu. Fall /21/2016

Lecture 3 Advanced Computer Graphics (CS & SE )

OpenGL. 1 OpenGL OpenGL 1.2 3D. (euske) 1. Client-Server Model OpenGL

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

Hierarchical Modeling and scene graphs

How OpenGL Works. Retained Mode. Immediate Mode. Introduction To OpenGL

Lecture 26 of 41. Picking Videos 5: More CGA

Computer Graphics (CS 543) Lecture 4a: Linear Algebra for Graphics (Points, Scalars, Vectors)

Introduction to OpenGL

Introduction to Computer Graphics with OpenGL/GLUT

Programming with OpenGL Part 3: Three Dimensions

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

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

2/3/16. Interaction. Triangles (Clarification) Choice of Programming Language. Buffer Objects. The CPU-GPU bus. CSCI 420 Computer Graphics Lecture 3

CS193P - Lecture 19. iphone Application Development. OpenGL ES

Interaction. CSCI 420 Computer Graphics Lecture 3

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

Computer Graphics. OpenGL

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

Hierarchical Modeling and Scene Graphs

Hierarchical Modeling and Scene Graphs

Computer Graphics. Bing-Yu Chen National Taiwan University

Computer Graphics (Basic OpenGL)

Computer Graphics. This Week. Meshes. Meshes. What is a Polygon Mesh? Meshes. Modelling Shapes with Polygon Meshes.

Computer Graphics Course 2005

Programming of Graphics

This Lecture. Why OpenGL? Introduction to OpenGL. Programmer s View

Methodology for Lecture

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

3 Meshes. Strips, Fans, Indexed Face Sets. Display Lists, Vertex Buffer Objects, Vertex Cache

Hierarchical Modelling

Meshing and Geometry

CSCI 4620/8626. Computer Graphics Attributes of Graphics Primitives (Chapter 5)

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

三維繪圖程式設計 3D Graphics Programming Design 第三章三維繪圖狀態設定和幾何元件繪製嘉大資工系盧天麒

Homework #2 and #3 Due Friday, October 12 th and Friday, October 19 th

To Do. Review of Last Demo. Methodology for Lecture. Geometry Basic Setup. Outline. Foundations of Computer Graphics (Fall 2012)

Lectures OpenGL Introduction

Computer Graphics and Visualization. Graphics Systems and Models

OpenGL Texture Mapping. Objectives Introduce the OpenGL texture functions and options

Graphics Pipeline & APIs

4: Polygons and pixels

Polygonal Meshes: Representing 3D Objects

How shapes are represented in 3D Graphics. Aims and objectives By the end of the lecture you will be able to describe

Classic Rendering Pipeline

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

Programming using OpenGL: A first Introduction

To Do. Demo: Surreal (HW 3) This Lecture. Introduction to OpenGL. Outline. Foundations of Computer Graphics (Spring 2012)

Basic Graphics Programming

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

Transcription:

Display Lists Conceptually similar to a graphics file Must define (name, create) Add contents Close In client-server environment, display list is placed on server Can be redisplayed without sending primitives over network each time

Display List Functions Creating a display list GLuint id; void init() { id = glgenlists( 1 ); glnewlist( id, GL_COMPILE ); /* other OpenGL routines */ glendlist(); } Call a created list void display() { glcalllist( id ); }

Hierarchy and Display Lists Consider model of a car - Create display list for chassis - Create display list for wheel glnewlist( CAR, GL_COMPILE ); glcalllist( CHASSIS ); gltranslatef( ); glcalllist( WHEEL ); gltranslatef( ); glcalllist( WHEEL ); glendlist();

Data Structures for Objects Simple data structures for building polygonal models Vertex lists Edge lists OpenGL vertex arrays

Representing a Mesh Consider a mesh v 5 v 6 e e 3 e 9 8 v 8 v 4 e 1 e 11 e 10 e v 7 e v 7 4 1 v e e 2 12 v 6 e 3 5 There are 8 nodes and 12 edges 5 interior polygons 6 interior (shared) edges Each vertex has a location v i = (x i, y i, z i ) e 2

Simple Representation Define each polygon by the geometric locations of its vertices Leads to OpenGL code such as glbegin(gl_polygon); glvertex3f(x1, y1, z1); glvertex3f(x6, y6, z6); glvertex3f(x7, y7, z7); glend(); Inefficient and unstructured Consider moving a vertex to a new location Must search for all occurrences

Inward and Outward Facing Polygons The order {v 1, v 6, v 7 } and {v 6, v 7, v 1 } are equivalent in that the same polygon will be rendered by OpenGL but the order {v 1, v 7, v 6 } is different The first two describe outwardly facing polygons Use the right-hand rule = counter-clockwise encirclement of outward-pointing normal OpenGL can treat inward and outward facing polygons differently

Geometry vs Topology Generally it is a good idea to look for data structures that separate the geometry from the topology Geometry: locations of the vertices Topology: organization of the vertices and edges Example: a polygon is an ordered list of vertices with an edge connecting successive pairs of vertices and the last to the first Topology is the same even if geometry changes

Vertex Lists Put the geometry in an array Use pointers from the vertices into this array Introduce a polygon list P1 P2 P3 P4 P5 topology v 1 v 7 v 6 v 8 v 5 v 6 geometry x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 x 4 y 4 z 4 x 5 y 5 z 5. x 6 y 6 z 6 x 7 y 7 z 7 x 8 y 8 z 8

Shared Edges Vertex lists will draw filled polygons correctly but if we draw the polygon by its edges, shared edges are drawn twice Can store mesh by edge list

Edge List Every edge has two vertices e1 e2 e3 e4 e5 e6 e7 e8 e9 v1 v6 x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 x 4 y 4 z 4 x 5 y 5 z 5. x 6 y 6 z 6 x 7 y 7 z 7 x 8 y 8 z 8 e 2 v 5 v 6 e e 3 e 9 8 v 8 e 1 e 11 e 10 e v 7 e v 7 4 1 v e e 2 12 v 6 e 3 5 Note polygons are not represented

Modeling a Cube Model a color cube for rotating cube program Define global arrays for vertices and colors GLfloat vertices[][3] = { {-1.0,-1.0,-1.0}, {1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}}; GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};

Drawing a polygon from a list of indices Draw a quadrilateral from a list of indices into the array vertices and use color corresponding to first index void polygon(int a, int b, int c, int d) { glcolor3fv(colors[a]); glbegin(gl_polygon); glvertex3fv(vertices[a]); glvertex3fv(vertices[b]); glvertex3fv(vertices[c]); glvertex3fv(vertices[d]); glend(); }

Draw cube from faces void colorcube( ) { polygon(0,3,2,1); polygon(2,3,7,6); polygon(0,4,7,3); polygon(1,2,6,5); polygon(4,5,6,7); polygon(0,1,5,4); } 1 5 6 2 7 4 0 3 Note that vertices are ordered so that we obtain correct outward facing normals

Efficiency The weakness of our approach is that we are building the model in the application and must do many function calls to draw the cube Drawing a cube by its faces in the most straight forward way requires 6 glbegin, 6 glend 6 glcolor 24 glvertex

Vertex Arrays OpenGL provides a facility called vertex arrays that allows us to store array data in the implementation Six types of arrays supported Vertices Colors Color indices Normals Texture coordinates Edge flags We will need only colors and vertices

Initialization Using the same color and vertex data, first we enable glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); Identify location of arrays glvertexpointer(3, GL_FLOAT, 0, vertices); 3d arrays stored as floats data contiguous data array glcolorpointer(3, GL_FLOAT, 0, colors);

Mapping indices to faces Form an array of face indices GLubyte cubeindices[24] = {0,3,2,1, 2,3,7,6, 0,4,7,3, 1,2,6,5, 4,5,6,7, 0,1,5,4}; Each successive four indices describe a face of the cube Draw through gldrawelements() which replaces all glvertex and glcolor calls in the display callback 1 0 5 6 4 2 3 7

Drawing the cube Method 1: what to draw number of indices for(i=0; i<6; i++) gldrawelements(gl_polygon, 4, GL_UNSIGNED_BYTE, &cubeindices[4*i]); format of index data start of index data Method 2: gldrawelements(gl_quads, 24, GL_UNSIGNED_BYTE, cubeindices); Draws cube with 1 function call!!