COSC342: Computer Graphics

Similar documents
COMP371 COMPUTER GRAPHICS

CSE 167. Discussion 03 ft. Glynn 10/16/2017

Introductory Seminar

Computação Gráfica. Computer Graphics Engenharia Informática (11569) 3º ano, 2º semestre. Chap. 4 Windows and Viewports

CS 450: COMPUTER GRAPHICS REVIEW: STATE, ATTRIBUTES, AND OBJECTS SPRING 2015 DR. MICHAEL J. REALE

the gamedesigninitiative at cornell university Lecture 12 Scene Graphs

Tutorial 04. Harshavardhan Kode. September 14, 2015

CSE 167: Introduction to Computer Graphics Lecture #7: GLSL. Jürgen P. Schulze, Ph.D. University of California, San Diego Spring Quarter 2016

Tutorial 1: Your First Triangle!

Geometry Shaders. And how to use them

the gamedesigninitiative at cornell university Lecture 6 Scene Graphs

CS 548: COMPUTER GRAPHICS INTRODUCTION TO OPENGL AND GLUT SPRING 2015 DR. MICHAEL J. REALE

CS475/CS675 - Computer Graphics. OpenGL Drawing

Shaders. Slide credit to Prof. Zwicker

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

Tutorial 12: Real-Time Lighting B

CS452/552; EE465/505. Review & Examples

CS 432 Interactive Computer Graphics

CGT520 Lighting. Lighting. T-vertices. Normal vector. Color of an object can be specified 1) Explicitly as a color buffer

(12-1) OOP: Polymorphism in C++ D & D Chapter 12. Instructor - Andrew S. O Fallon CptS 122 (April 3, 2019) Washington State University

Tutorial 3: Texture Mapping

Computer graphics Labs: OpenGL (2/2) Vertex Shaders and Fragment Shader

Overview. By end of the week:

CS452/552; EE465/505. Image Processing Frame Buffer Objects

CS 548: COMPUTER GRAPHICS PORTRAIT OF AN OPENGL PROGRAM SPRING 2015 DR. MICHAEL J. REALE

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

Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach.

OBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe

Starting out with OpenGL ES 3.0. Jon Kirkham, Senior Software Engineer, ARM

Best practices for effective OpenGL programming. Dan Omachi OpenGL Development Engineer

Vertex Buffer Objects

Vertex Buffer Objects. Vertex Buffer Objects: The Big Idea

CGT520 Transformations

C++ (classes) Hwansoo Han

Cpt S 122 Data Structures. Course Review Midterm Exam # 2

Design issues for objectoriented. languages. Objects-only "pure" language vs mixed. Are subclasses subtypes of the superclass?

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

Comp 410/510 Computer Graphics Spring Programming with OpenGL Part 3: Shaders

Programming with OpenGL Shaders I. Adapted From: Ed Angel Professor of Emeritus of Computer Science University of New Mexico

Object Oriented Programming

ECE 3574: Dynamic Polymorphism using Inheritance

C++ Inheritance and Encapsulation

Discussion 3. PPM loading Texture rendering in OpenGL

Shaders. Introduction. OpenGL Grows via Extensions. OpenGL Extensions. OpenGL 2.0 Added Shaders. Shaders Enable Many New Effects

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

CGS 2405 Advanced Programming with C++ Course Justification

Object-Oriented Concept

GLSL Overview: Creating a Program

More C++ : Vectors, Classes, Inheritance, Templates

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

Programming with OpenGL Shaders I. Adapted From: Ed Angel Professor of Emeritus of Computer Science University of New Mexico

More C++ : Vectors, Classes, Inheritance, Templates. with content from cplusplus.com, codeguru.com

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

Computer Graphics (CS 4731) Lecture 11: Implementing Transformations. Prof Emmanuel Agu. Computer Science Dept. Worcester Polytechnic Institute (WPI)

Inheritance: Develop solutions by abstracting real-world object and their interaction into code to develop software solutions. Layering: Organization

CS452/552; EE465/505. Transformations

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

COSC252: Programming Languages: Abstraction and OOP. Jeremy Bolton, PhD Asst Teaching Professor. Copyright 2015 Pearson. All rights reserved.

CPSC 436D Video Game Programming

Graphics Programming. Computer Graphics, VT 2016 Lecture 2, Chapter 2. Fredrik Nysjö Centre for Image analysis Uppsala University

CPS 506 Comparative Programming Languages. Programming Language

[175 points] The purpose of this assignment is to give you practice with shaders in OpenGL.

CS452/552; EE465/505. Image Formation

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

gltf - what the? Concepts An overview of the basics of the GL Transmission Format Page 1 gltf 2.0 Quick Reference Guide Binary data references

Class CSE F. *slides are from CSE S at SKKU & at MIT

Chapter 1: Object-Oriented Programming Using C++

Inheritance, Polymorphism and the Object Memory Model

Interaction. CSCI 420 Computer Graphics Lecture 3

Today s Agenda. Shaders fundamentals. Programming with shader-based OpenGL

Lecture 11 Shaders and WebGL. October 8, 2015

Objective Questions. BCA Part III Paper XIX (Java Programming) page 1 of 5

GEA 2017, Week 4. February 21, 2017

From system point of view, a graphics application handles the user input, changes the internal state, called the virtual world by modeling or

What is Polymorphism? Quotes from Deitel & Deitel s. Why polymorphism? How? How? Polymorphism Part 1

11/19/2018. Data Buffers. Mike Bailey. From the Quick Reference Card. Computer Graphics DataBuffers.pptx

C11: Garbage Collection and Constructors

C10: Garbage Collection and Constructors

CS 432 Interactive Computer Graphics

Lecture 5: Inheritance

Common Misunderstandings from Exam 1 Material

Data Structures and Other Objects Using C++

Lab 1 Sample Code. Giuseppe Maggiore

Polymorphism Part 1 1

Announcement. Homework 1 has been posted in dropbox and course website. Due: 1:15 pm, Monday, September 12

CMSC427 Fall 2017 OpenGL Notes A: Starting with JOGL and OpenGL Objectives of notes Readings Computer Graphics Programming in OpenGL with Java

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

Object Oriented Programming. Assistant Lecture Omar Al Khayat 2 nd Year

COMP6771 Advanced C++ Programming

CS1950U Setup Spring 2018

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

OBJECT ORIENTED PROGRAMMING

EECS 487: Interactive Computer Graphics

Lecture 13: Object orientation. Object oriented programming. Introduction. Object oriented programming. OO and ADT:s. Introduction

CLASSES AND OBJECTS IN JAVA

Inheritance. OOP components. Another Example. Is a Vs Has a. Virtual Destructor rule. Virtual Functions 4/13/2017

An Introduction to C++

Oops known as object-oriented programming language system is the main feature of C# which further support the major features of oops including:

PASCAL - OBJECT ORIENTED

VIRTUAL FUNCTIONS Chapter 10

Transcription:

COSC342: Computer Graphics 2017 Tutorial C++ Recap Stefanie Zollmann COMPUTER SCIENCE

C++ CLASSES class Camera{ public: //! Default constructor /*! Setting up default camera. */ Camera(); /*! Set position. */ void setposition(glm::vec3 pos); //.. private: // camera pose parameters glm::vec3 m_position; glm::vec3 m_lookat; //!< Position of camera //!< Lookat vector of camera STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 2

C++ OBJECTS Camera mycamera1; // Memory allocation on stack mycamera1.setposition(glm::vec3(0,0,-5)); Camera* mycamera2 = new Camera(); // Memory allocation on heap mycamera2->setposition(glm::vec3(0,0,-5)); STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 3

C++ OBJECTS Camera mycamera1; // Memory allocation on stack mycamera1.setposition(glm::vec3(0,0,-5)); Camera* mycamera2 = new Camera(); // Memory allocation on heap mycamera2->setposition(glm::vec3(0,0,-5)); // mycamera2 is on heap - we need to take of memory deallocation // Every call to new must be matched by a call to delete; failure to do so causes memory leaks. delete mycamera2; STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 4

DATA ENCAPSULATION IN C++ class Camera{ public: //! Default constructor /*! Setting up default camera. */ Camera(); /*! Set position. */ void setposition(glm::vec3 pos); //.. private: // camera pose parameters glm::vec3 m_position; glm::vec3 m_lookat; //!< Position of camera //!< Lookat vector of camera STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 5

ACCESSING THE DATA MEMBERS Camera mycamera1; mycamera1.setposition(glm::vec3(0,0,-5)); mycamera1.position = glm::vec3(0,0,-5); // not allowed - private member Camera* mycamera2 = new Camera(); mycamera2->setposition(glm::vec3(0,0,-5)); mycamera2->position= glm::vec3(0,0,-5); // not allowed - private member STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 6

C++ INHERITANCE Object Triangle Quad Mesh class DerivedClass: access-specifier BaseClass Quad Example: class Quad: public Object STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 7

C++ INHERITANCE class Object{ public: Object(); //! Destructor /*! Delete all related resources. */ virtual ~Object(); void setshader(shader* newshader); glm::mat4 gettransform(); void addtransform(glm::mat4 mat); virtual void render(camera* camera)=0; void settranslate(glm::vec3 translatevec); void setscale(float scale); void bindshaders(); ; private: std::string name; glm::mat4 transform; glm::mat4 rotmat; glm::mat4 transmat; glm::mat4 scalemat; protected: Shader* shader; //!< name of object //!< transform matrix of object //!< rotation matrix //!< translation matrix //!< scale matrix //!< object can have a shader class Quad: public Object{ ; public: //! Default constructor /*! Setting up default quad. */ Quad(); //! Destructor /*! Delete quad. */ ~Quad(); //! init /*! Setting up default quad. */ void init(); //! render /*! Render default quad. */ void render(camera* camera); private: GLfloat g_vertex_buffer_data[18]; //vertices of Quad GLuint vertexbuffer; STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 8

C++ INHERITANCE class Object{ public: Object(); //! Destructor /*! Delete all related resources. */ virtual ~Object(); void setshader(shader* newshader); glm::mat4 gettransform(); void addtransform(glm::mat4 mat); virtual void render(camera* camera)=0; void settranslate(glm::vec3 translatevec); void setscale(float scale); void bindshaders(); ; private: std::string name; glm::mat4 transform; glm::mat4 rotmat; glm::mat4 transmat; glm::mat4 scalemat; protected: Shader* shader; //!< name of object //!< transform matrix of object //!< rotation matrix //!< translation matrix //!< scale matrix //!< object can have a shader class Triangle: public Object{ ; public: //! Default constructor /*! Setting up default triangle. */ Triangle(); //! Destructor /*! Delete triangle. */ ~Triangle(); //! init /*! Setting up default triangle. */ void init(); //! render /*! Render default quad. */ void render(camera* camera); private: GLfloat g_vertex_buffer_data[9]; GLuint vertexbuffer; STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 9

C++ OVERLOADING void Triangle::render(Camera* camera){ bindshaders(); // Build the model matrix -get from object glm::mat4 ModelMatrix = this->gettransform(); glm::mat4 MVP = camera->getviewprojectionmatrix() * ModelMatrix; // Send our transformation to the currently bound shader, // in the "MVP" uniform shader->updatemvp(mvp); // 1rst attribute buffer : vertices glenablevertexattribarray(0); glbindbuffer(gl_array_buffer, vertexbuffer); glvertexattribpointer( 0, // attribute 0. No particular reason for 0, but must match the layout in the shader. 3, // size GL_FLOAT, // type GL_FALSE, // normalized? 0, // stride (void*)0 // array buffer offset ); // Draw the triangle! gldrawarrays(gl_triangles, 0, 3); // 3 indices starting at 0 -> 1 triangle gldisablevertexattribarray(0); STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 10

C++ OVERLOADING void Quad::render(Camera* camera){ bindshaders(); // Build the model matrix -get from object glm::mat4 ModelMatrix = this->gettransform(); glm::mat4 MVP = camera->getviewprojectionmatrix() * ModelMatrix; // Send our transformation to the currently bound shader, // in the "MVP" uniform shader->updatemvp(mvp); // 1rst attribute buffer : vertices glenablevertexattribarray(0); glbindbuffer(gl_array_buffer, vertexbuffer); glvertexattribpointer( 0, // attribute 0. No particular reason for 0, but must match the layout in the shader. 3, // size GL_FLOAT, // type GL_FALSE, // normalized? 0, // stride (void*)0 // array buffer offset ); // Draw the quad with two triangles! gldrawarrays(gl_triangles, 0, 6); // 6 indices starting at 0 -> creates 2 triangles -> 1 quad gldisablevertexattribarray(0); STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 11

POLYMORPHISM IN C++ Scene* myscene = new Scene(); Triangle* mytriangle = new Triangle(); myscene->addobject(mytriangle); Quad* myquad = new Quad(); myscene->addobject(myquad); myscene->render(mycamera); Main.cpp void Scene::render(Camera* camera){ for (int i=0;i<sceneobjects.size();i++) { sceneobjects[i]->render(camera); void Scene::addObject(Object *object){ sceneobjects.push_back(object); Which render method? Scene.cpp STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 12

POLYMORPHISM IN C++ Scene* myscene = new Scene(); Triangle* mytriangle = new Triangle(); myscene->addobject(mytriangle); Quad* myquad = new Quad(); myscene->addobject(myquad); myscene->render(mycamera); Main.cpp void Scene::render(Camera* camera){ for (int i=0;i<sceneobjects.size();i++) { sceneobjects[i]->render(camera); void Scene::addObject(Object *object){ sceneobjects.push_back(object); Which render method? Using late binding by using virtual for the render method in the base class (Object): virtual void render(camera* camera)=0; Scene.cpp STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 13

POLYMORPHISM IN C++ Scene* myscene = new Scene(); Triangle* mytriangle = new Triangle(); myscene->addobject(mytriangle); Quad* myquad = new Quad(); myscene->addobject(myquad); myscene->render(mycamera); Main.cpp void Scene::render(Camera* camera){ for (int i=0;i<sceneobjects.size();i++) { sceneobjects[i]->render(camera); void Scene::addObject(Object *object){ sceneobjects.push_back(object); Scene.cpp Which render method? Using late binding by using virtual for the render method in the base class (Object): virtual void render(camera* camera)=0; If sceneobjects[i] is Quad: Quad s render method will be called If sceneobjects[i] is Triangle: Triangle s render method will be called STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 14

ABSTRACT CLASS class Object{ public: Object(); //! Destructor /*! Delete all related resources. */ virtual ~Object(); void setshader(shader* newshader); glm::mat4 gettransform(); void addtransform(glm::mat4 mat); virtual void render(camera* camera)=0; void settranslate(glm::vec3 translatevec); void setscale(float scale); void bindshaders(); Be careful, you can t create objects of abstract class type. Will create a compile error. ; private: std::string name; glm::mat4 transform; glm::mat4 rotmat; glm::mat4 transmat; glm::mat4 scalemat; protected: Shader* shader; //!< name of object //!< transform matrix of object //!< rotation matrix //!< translation matrix //!< scale matrix //!< object can have a shader STEFANIE ZOLLMANN COMPUTER GRAPHICS - C++ RECAP 15

Thank You! For more material visit http://www.cs.otago.ac.nz/ cosc342/ STEFANIE ZOLLMANN