Other things you should know
This presentation is the property of its rightful owner.
Sponsored Links
1 / 42

Other Things You Should Know PowerPoint PPT Presentation


  • 56 Views
  • Uploaded on
  • Presentation posted in: General

Other Things You Should Know. CS 4363/6353. Overview. Matrix Stacks Raytracing and NPR Physics Engines Common File Formats. Matrix Stacks. Typically , matrices are stored in a stack to avoid this Stacks give us the ability to rotate one body around another

Download Presentation

Other Things You Should Know

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Other things you should know

Other Things You Should Know

CS 4363/6353


Overview

Overview

  • Matrix Stacks

  • Raytracing and NPR

  • Physics Engines

  • Common File Formats


Matrix stacks

Matrix Stacks

  • Typically, matrices are stored in a stack to avoid this

  • Stacks give us the ability to rotate one body around another

  • Stacks are also how (character) animation is done

  • Let’s say we wanted to fly through the solar system

    • You still have a camera matrix

    • The sun has been translated (but probably not rotated)


Matrix stack example

Matrix Stack Example

Camera matrix


Matrix stack example1

Matrix Stack Example

“Push” the camera matrix.Note: everything is rotated by our camera matrix…

Camera matrix


Matrix stack example2

Matrix Stack Example

“Push” the translation of the sun

Sun trans matrix

Camera matrix


Matrix stack example3

Matrix Stack Example

“Push” the translation of the sun

Order of operations

Combine everything on the stack into one MV matrix, then drawthe sun. Trans first, then camera!

Sun trans matrix

mMV

Camera matrix


Matrix stack example4

Matrix Stack Example

The Earth is both translated

Sun trans matrix

Camera matrix

Note: yes, yes… I know it’s not to scale…


Matrix stack example5

Matrix Stack Example

The Earth is both translated

Earth trans matrix

Sun trans matrix

Camera matrix


Matrix stack example6

Matrix Stack Example

The Earth is both translated

and rotated (in that order), so

we push those on a separate

frame…

Earth rot matrix

Earth trans matrix

Sun trans matrix

Camera matrix


Matrix stack example7

Matrix Stack Example

WRONG! The matrices aremultiplied TOP DOWN!

Earth rot matrix

Earth trans matrix

Sun trans matrix

Camera matrix


Matrix stack example8

Matrix Stack Example

WRONG! The matrices aremultiplied TOP DOWN!

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example9

Matrix Stack Example

Order

Combine everything on the

stack into one MV matrix,

then draw the Earth!

Earth trans matrix

Earth rot matrix

mMV

Sun trans matrix

Camera matrix


Matrix stack example10

Matrix Stack Example

What about the moon?

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example11

Matrix Stack Example

Well, the moon has a

translation…

Moon trans matrix

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example12

Matrix Stack Example

Moon rot matrix

Well, the moon has a

translation… as well as

a rotation…

Moon trans matrix

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example13

Matrix Stack Example

Moon trans matrix

Well, the moon has a

translation… as well as

a rotation…

Moon rot matrix

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example14

Matrix Stack Example

Order

Moon trans matrix

So we combine everything

on the stack into one MV

matrix, then draw the moon

Moon rot matrix

Earth trans matrix

mMV

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example15

Matrix Stack Example

Moon trans matrix

What if we want to draw a little independent spaceship?

Moon rot matrix

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example16

Matrix Stack Example

POP the Moon stuff!

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example17

Matrix Stack Example

POP the Earth stuff!

Earth trans matrix

Earth rot matrix

Sun trans matrix

Camera matrix


Matrix stack example18

Matrix Stack Example

POP the Sun stuff!

Sun trans matrix

Camera matrix


Matrix stack example19

Matrix Stack Example

…Leaving us with just thecamera matrix. Then, we

can add the spaceship

matrices on top of that.

Camera matrix


Matrix stack example20

Matrix Stack Example

Push the spaceship trans first!

Ship trans matrix

Camera matrix


Matrix stack example21

Matrix Stack Example

Then the rotation! Why?

Ship rot matrix

Ship trans matrix

Camera matrix


Matrix stack example22

Matrix Stack Example

Now that you have your MV,

draw the ship…

Ship rot matrix

Ship trans matrix

mMV

Camera matrix


Raytracing

RaYTracing

  • Easy to read article at http://en.wikipedia.org/wiki/Ray_tracing_(graphics)

Note: there are independent reflection, refraction and shadow rays


Examples again from wikipedia org

Examples(again, from Wikipedia.org)


Examples again from wikipedia org1

Examples(again, from Wikipedia.org)


Raytracing1

Raytracing

  • Advantages:

    • Realistic simulation of lighting

    • Natural shadows

    • Simple to implement (but not trivial)

    • Heavily parallelizable

  • Disadvantages

    • Still an approximation

      • not truly photorealistic

      • Must limit depth

    • Recursively adds up light values of rays

    • Ssssssssssssslllllllllllllllloooooooooooooooowwwwwwwwwwwwww


The uncanny valley

The Uncanny Valley…

  • “…holds that when human replicas look and act almost, but not perfectly, like actual human beings, it causes a response of revulsion among human observers”

Final Fantasy: The Spirits Within

http://en.wikipedia.org/wiki/Uncanny_valley


Npr non photorealistic rendering

NPR(non-photorealistic Rendering)

  • Stylistic

    • Water color

    • Impressionism

  • Example: Toon Shading

    • Geometry remains the same

    • Shading changes

  • Commonly seen in video games

    • Borderlands

http://en.wikipedia.org/wiki/File:Toon_Shader.jpg


Working with physics engines

Working with Physics Engines

  • There are several out there:

    • Tokamak (open source, no longer maintained)

    • Bullet (open source – several commercial games and movies like “2012” and “Bolt”)

    • Havok (commercial – Ireland, loads of commercial games)

    • PhysX (commercial – Ageia/NVDIA, CUDA, uses PPU, tons of games as well)

  • Usually provide:

    • Gravity

    • Collision (between static and dynamic bodies)

    • Soft-body physics

    • Ragdoll physics

    • Vehicle dynamics

    • Fluid simulations

    • Cloth simulations


How we use them

How We use them…

  • Physics engine is a black box

  • We “load” the physics engine

    • Tell it which objects are dynamic

    • Tell it which are static

    • Define parameters, such as gravity, bounce and so on

  • During each frame of animation:

    • Update the physics engine by a delta time

    • Ask the physics engine for:

      • The location of each dynamic object

      • The orientation of each dynamic object


Tokamak example

TOKAMAK Example

  • Typically have a limited number of basic shapes

    • Cube

    • Capsule

    • Sphere

  • Must declare variables to hold all of the objects in your scene

    #include <tokamak.h>

    neSimulator* gSim = NULL; neRigidBody* gCubes[NUM_CUBES]; neRigidBody* sphere; neAnimatedBody* floor1 = NULL; neT3 t;


Other things you should know

void setupPhysicsEngine() {

// This will define the size and shape of each cube

neGeometry* geom;

// length, width and height of the cube

neV3 boxSize1;

neV3 gravity;

neV3 pos;

float mass;

float fmass = 0.2f;

// The number of total objects the simulator has to keep track of...

neSimulatorSizeInfosizeInfo;

// Fill in the size info about the environment

sizeInfo.rigidBodiesCount = NUM_CUBES+1;

sizeInfo.animatedBodiesCount = 1;

// total number of objects

sizeInfo.geometriesCount = sizeInfo.rigidBodiesCount + sizeInfo.animatedBodiesCount;

// total number of collisions possible n*(n-1)/2

sizeInfo.overlappedPairsCount = sizeInfo.geometriesCount*(sizeInfo.geometriesCount-1)/2;

sizeInfo.rigidParticleCount = 0;

sizeInfo.constraintsCount = 0;

sizeInfo.terrainNodesStartCount = 0;

gravity.Set(0.0f, -3.0f, 0.0f);

gSim = neSimulator::CreateSimulator(sizeInfo, NULL, &gravity);

// Setup a box - using loop

for (int i = 0; i < NUM_CUBES; i++) {

gCubes[i] = gSim->CreateRigidBody();

// Get the geometry object from the cube

geom = gCubes[i]->AddGeometry();

boxSize1.Set(1.0f, 1.0f, 1.0f);

geom->SetBoxSize(boxSize1[0], boxSize1[1], boxSize1[2]);

gCubes[i]->UpdateBoundingInfo();

mass = 1.0f;

gCubes[i]->SetInertiaTensor(neBoxInertiaTensor(boxSize1[0], boxSize1[1], boxSize1[2], mass));

gCubes[i]->SetMass(mass);

pos.Set(i%10-5, i/10+0.5, -30);

gCubes[i]->SetPos(pos);

}

// Create the sphere

sphere = gSim->CreateRigidBody();

geom = sphere->AddGeometry();

geom->SetSphereDiameter(2);

sphere->UpdateBoundingInfo();

sphere->SetInertiaTensor(neSphereInertiaTensor(2, fmass));

sphere->SetMass(fmass);

pos.Set(0, 1, -4);

sphere->SetPos(pos);

sphere->SetAngularDamping(0.01f);

// Create the floor

floor1 = gSim->CreateAnimatedBody();

geom = floor1->AddGeometry();

boxSize1.Set(100, 0.001, 100);

geom->SetBoxSize(boxSize1[0], boxSize1[1], boxSize1[2]);

floor1->UpdateBoundingInfo();

pos.Set(0, 0, 0);

floor1->SetPos(pos);

}


Other things you should know

void display () {

degree += 0.1f;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

gSim->Advance(0.015);

//Cubes

for (int i = 0; i < NUM_CUBES; i++) {

t = gCubes[i]->GetTransform();

cube_state[0][0] = t.rot[0][0]; cube_state[1][0] = t.rot[1][0]; cube_state[2][0] = t.rot[2][0]; cube_state[3][0] = t.pos[0];

cube_state[0][1] = t.rot[0][1]; cube_state[1][1] = t.rot[1][1]; cube_state[2][1] = t.rot[2][1]; cube_state[3][1] = t.pos[1];

cube_state[0][2] = t.rot[0][2]; cube_state[1][2] = t.rot[1][2]; cube_state[2][2] = t.rot[2][2]; cube_state[3][2] = t.pos[2];

cube_state[0][3] = 0.0f; cube_state[1][3] = 0.0f; cube_state[2][3] = 0.0f; cube_state[3][3] = 1.0f;

drawCube(…);

}

// Sphere

t = sphere->GetTransform();

sphere_state[0][0] = t.rot[0][0]; sphere_state[1][0] = t.rot[1][0]; sphere_state[2][0] = t.rot[2][0]; sphere_state[3][0] = t.pos[0];

sphere_state[0][1] = t.rot[0][1]; sphere_state[1][1] = t.rot[1][1]; sphere_state[2][1] = t.rot[2][1]; sphere_state[3][1] = t.pos[1];

sphere_state[0][2] = t.rot[0][2]; sphere_state[1][2] = t.rot[1][2]; sphere_state[2][2] = t.rot[2][2]; sphere_state[3][2] = t.pos[2];

sphere_state[0][3] = 0.0f; sphere_state[1][3] = 0.0f; sphere_state[2][3] = 0.0f; sphere_state[3][3] = 1.0f;

drawSphere(…);

glutSwapBuffers();

glutPostRedisplay();

}


Common file formats

Common File Formats

  • .3ds – AutoDesk 3DS Max (legacy)

  • .blend - Blender

  • .c4d – Cinema 4D

  • .dae – COLLADA (xml)

  • .fbx – AutoDesk

  • .lwo – LightWave Object

  • .ma/.mb – AutoDesk Maya

  • .max – AutoDesk 3DS Max

  • .md2/.md3 – Quake 2/Quake 3

  • .pov – POV ray file

  • .skp – Google Sketchup

  • .sldasm – SolidWorlds Assembly

  • .smd – Valve’s format

  • .u3D – Universal 3D (3D Industry Consortium - xml)


The obj file format

The .OBJ file FOrmat

  • Also called WaveFront OBJ

  • Text-based

  • Easy to work with and widely accepted

  • File specifies:

    • Position of each vertex

    • UVs of each vertex

    • Normals of each vertex

    • List of faces (triangles)


Example http en wikipedia org wiki wavefront obj file

Example(http://en.wikipedia.org/wiki/Wavefront_.obj_file)

# List of Vertices, with (x,y,z[,w]) coordinates, w is optional.

v 0.123 0.234 0.345 1.0

v ...

...

# Texture coordinates, in (u,v[,w]) coordinates, w is optional.

vt 0.500 -1.352 [0.234]

vt ...

...

# Normals in (x,y,z) form; normals might not be unit.

vn 0.707 0.000 0.707

vn ...

...

# Face Definitions (see below)

f 1 2 3# Vertices only

f 3/1 4/2 5/3# Vertices/Texture coords

f 6/4/1 3/5/3 7/6/5# Vertices/Textures/Normals

f ...

...


Other options

Other Options

  • Smooth shading

    • s 1 – smoothing is true

    • s off – no smoothing

  • Materials may be put into a separate .mtl file

    • newmtlmyMat

    • Ka 1.000 1.000 1.000#ambient white

    • Kd 1.000 1.000 1.000#diffuse white

    • Ks 0.000 0.000 0.000#specular off

    • Ns 50.000# size of spec (s from our lighting equation)

    • Tr 0.9#transparency


  • Login