29
6.S096 Lecture 9 – Visualization OpenGL, Makefiles, Large Projects Andre Kessler January 29, 2014 Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 1/1

6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

  • Upload
    others

  • View
    5

  • Download
    1

Embed Size (px)

Citation preview

Page 1: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

6.S096 Lecture 9 – VisualizationOpenGL, Makefiles, Large Projects

Andre Kessler

January 29, 2014

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 1 / 1

Page 2: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

What is OpenGL?

The standard for most 2D/3D graphics renderingtoday.http://www.opengl.org/

Highly cross-platform (between OS, architecture, etc)

Everything from decade-old computers to mobile devices today.

An abstract API for drawing; bindings based in C

Interface with the GPU graphics pipeline.

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 2 / 1

Page 3: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

How do we get it?

There are a lot of really old (harmful!) tutorials outthere.

These are good ones:

Jason L. McKesson: http://www.arcsynthesis.org/gltut/

opengl-tutorial: http://www.opengl-tutorial.org/

WikiBooks

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 3 / 1

Page 4: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

How will we use it?

I’ve written some wrappers for the initialization (both general GL andglut).

Let’s look at the code (GlutWrapper.h)

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 4 / 1

Page 5: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

OpenGL Display Function (jumping ahead)

glBindBuffer( GL_ARRAY_BUFFER, _positionBufferObject );

glBufferSubData( GL_ARRAY_BUFFER, 0,

sizeof( float ) * _bufSize, _buf );

glBindBuffer( GL_ARRAY_BUFFER, 0 );

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 5 / 1

Page 6: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

OpenGL Display Function (jumping ahead)

glUseProgram( _program );

glBindBuffer( GL_ARRAY_BUFFER, _positionBufferObject );

glEnableVertexAttribArray( 0 );

glVertexAttribPointer( 0, 4, GL_FLOAT, GL_FALSE, 0, 0 );

glDrawArrays( GL_TRIANGLE_STRIP, 0, (GLsizei) _bufSize );

glDisableVertexAttribArray( 0 );

glUseProgram( 0 );

glutSwapBuffers();

glutPostRedisplay();

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 6 / 1

Page 7: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

OpenGL Initialization

glutInit( &argc, argv );

uint32_t displayMode = GLUT_DOUBLE

| GLUT_ALPHA

| GLUT_DEPTH

| GLUT_STENCIL;

glutInitDisplayMode( displayMode );

// We’ll be using OpenGL 3.0

glutInitContextVersion( 3, 0 );

glutInitContextProfile( GLUT_CORE_PROFILE );

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 7 / 1

Page 8: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

OpenGL: Buffer Objects

glGenBuffers( 1, &_positionBufferObject );

glBindBuffer( GL_ARRAY_BUFFER, _positionBufferObject );

//..etc

glBufferData( GL_ARRAY_BUFFER, 4 * bufSize,

_buf, GL_STATIC_DRAW );

glBindBuffer( GL_ARRAY_BUFFER, 0 );

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 8 / 1

Page 9: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

More in the code...

Let’s look into the code...

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 9 / 1

Page 10: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Components

Requirements

25% Physics Engine - quality and extensibility of simulation code

25% Visualization - OpenGL; getting a good visualization working

15% Unit testing - gtest, quality and coverage of tests

15% Software Process - code reviews, overall integration of project

10% Interactive - user interactivity with simulation (keyboard, mouse, etc)

10% Do something cool - make it look cool, add a useful feature, dosomething interesting!

Extra 5% available in all areas for exceptional effort.

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 10 / 1

Page 11: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Physics Engine Inaccuracies

Your integrator should be improving on the basic;this is what the basic one does:

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 11 / 1

Page 12: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 1

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 12 / 1

Page 13: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 2

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 13 / 1

Page 14: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 3

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 14 / 1

Page 15: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 4

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 15 / 1

Page 16: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 5

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 16 / 1

Page 17: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 6

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 17 / 1

Page 18: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 7

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 18 / 1

Page 19: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 8

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 19 / 1

Page 20: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 9

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 20 / 1

Page 21: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Binary Star System Example 10

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 21 / 1

Page 22: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Visualization

OpenGL!

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 22 / 1

Page 23: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Content Provided: Reminder

Vector3.h

So that you don’t have to write (all) of your own vector math, feel free touse the header available at:http://web.mit.edu/6.s096/www/final/Vector3.h.It’s a templated 3-d vector class that can be widely useful and isguaranteed fast (“plain old data type”)

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 23 / 1

Page 24: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

OpenGL

Content Provided - Vector3.h

template<typename T>

class Vector3 {

T _x, _y, _z;

public:

Vector3() : _x{}, _y{}, _z{} {}

Vector3( T x_, T y_, T z_ ) :

_x{x_}, _y{y_}, _z{z_} {}

inline T x() const { return _x; }

inline T y() const { return _y; }

inline T z() const { return _z; }

T norm() const;

T normsq() const;

};

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 24 / 1

Page 25: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

Makefile Structure

Reminder: the compilation process

1. Preprocess

2. Compile

3. Link

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 25 / 1

Page 26: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

Makefile Structure

Code Reviews: what you send to me

Your name and the name of the person whose code you are reviewing.

The snippet of code you are reviewing: more than 30 lines, less than100.

Your comments interspersed in their code.

A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).

Send this to [email protected], CC-ing the person being reviewed.

You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 26 / 1

Page 27: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

Makefile Structure

Code Reviews: what you send to me

Your name and the name of the person whose code you are reviewing.

The snippet of code you are reviewing: more than 30 lines, less than100.

Your comments interspersed in their code.

A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).

Send this to [email protected], CC-ing the person being reviewed.

You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 26 / 1

Page 28: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

Makefile Structure

Examples

Let’s see some examples...

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 27 / 1

Page 29: 6.S096 Lecture 9 { Visualizationweb.mit.edu/6.s096/www/lecture/lecture09/lecture-09.pdfAndre Kessler 6.S096 Lecture 9 { Visualization January 29, 2014 10 / 1. OpenGL Physics Engine

Wrap-up

Wrap-up & Friday

Final project due Saturday 2/1 at 6pm.

Send me your code reviews tonight please!

Class on Fri. 1/29 is still in 34-101 at 2pm.

Grab-bag: coding interviews, general perspective

Bring all your C++ questions!

Questions?

I’m available after class or on Piazza.

Lab today in 32-044, 7-9pm

We’ll be covering more OpenGL and helping out with projects.

Andre Kessler 6.S096 Lecture 9 – Visualization January 29, 2014 28 / 1