3d math without presenter notes

64
The Day You Finally Use Algebra! Janie Clayton-Hasz

Upload: janie-clayton-hasz

Post on 16-Jun-2015

253 views

Category:

Technology


2 download

DESCRIPTION

This is the exact same presentation as the other one, except this does not include the presenter notes. When I uploaded the PDF it looked very bad.

TRANSCRIPT

Page 1: 3D Math Without Presenter Notes

The Day You Finally Use Algebra!

Janie Clayton-Hasz

Page 2: 3D Math Without Presenter Notes

About Me

Page 3: 3D Math Without Presenter Notes

But math is hard! (Let’s go shopping!)

Page 4: 3D Math Without Presenter Notes

Math is hard. But math is fun too.

Page 5: 3D Math Without Presenter Notes

Demo

Page 6: 3D Math Without Presenter Notes

Normalized Coordinate

Systems

Page 7: 3D Math Without Presenter Notes

Cartesian Coordinates

Page 8: 3D Math Without Presenter Notes

320

480

Page 9: 3D Math Without Presenter Notes

320

480 or 568

Page 10: 3D Math Without Presenter Notes
Page 11: 3D Math Without Presenter Notes

1

1

Page 12: 3D Math Without Presenter Notes

(0,0) (1,0)

(0,1) (1,1)

Page 13: 3D Math Without Presenter Notes

(0,0) (1,0)

(0,1) (1,1)

Page 14: 3D Math Without Presenter Notes

(0,0) (1,0)

(0,1) (1,1)

Page 15: 3D Math Without Presenter Notes

self.size.width

self. size.

height

Page 16: 3D Math Without Presenter Notes

- Colors, like the screen dimensions, are based on percentages rather than absolute values.

- If you come from a graphic design background, you need to convert your 255 scale to percentages.

Page 17: 3D Math Without Presenter Notes

Algorithm Rosetta Stone

Page 18: 3D Math Without Presenter Notes

Rosetta Stone- Had the same text in

Greek, demotic, and hieroglyphics. Was used to translate hieroglyphics

- Going to do similar thing, but with math algorithms, plain English, and code

Page 19: 3D Math Without Presenter Notes

√-1 2ˆ3 ∑ π

Page 20: 3D Math Without Presenter Notes

∑5

i = 1

4i

Algoritm

Page 21: 3D Math Without Presenter Notes

Plain English

I have a starting value of one. I have an end value of five. I want to multiply each value

by four and add them together.

Page 22: 3D Math Without Presenter Notes

var x = 0 !

for index in 1…5 { !

x += (4 * index) !

}

Code

Page 23: 3D Math Without Presenter Notes

It’s All Greek to Me

π

i

θ

Constant: 3.14159…

Change between two values

Square root of negative one

Variable representing an angle

Page 24: 3D Math Without Presenter Notes

√-1 2ˆ3 ∑ π…and it was delicious!

Page 25: 3D Math Without Presenter Notes

i 8 sum pi…and it was delicious!

Page 26: 3D Math Without Presenter Notes

Trigonometry

Page 27: 3D Math Without Presenter Notes

Triangles

A shape with three sides where the angles add up to 180 degrees

Everything in our world comes back to triangles

The most stable shape

Foundation of 3D graphics

Page 28: 3D Math Without Presenter Notes

Right Triangles

Page 29: 3D Math Without Presenter Notes

Pythagorean Theorem

aˆ2 + bˆ2 = cˆ2

Page 30: 3D Math Without Presenter Notes

Triangle Formulas

Tangent

Sin

Cosine

Arctangent

Arcsin

Arccosine

Page 31: 3D Math Without Presenter Notes

Triangle Formulas

Page 32: 3D Math Without Presenter Notes

Triangle Formulas

Page 33: 3D Math Without Presenter Notes

Circle Formulas

Circumference: 2πr

Area: πrˆ2

Page 34: 3D Math Without Presenter Notes

So What Can We Do Knowing This?

Change the direction a character is moving in

Check to see if the user is hitting a target area on the screen

Draw shapes and filters in specific configurations

Page 35: 3D Math Without Presenter Notes

Demo

Page 36: 3D Math Without Presenter Notes

Linear Algebra

Page 37: 3D Math Without Presenter Notes

What is Linear Algebra?

Linear Algebra allows you to perform an action on many values at the same time.

This action must be consistent across all values, such as multiplying every value by two.

Page 38: 3D Math Without Presenter Notes

What is Linear Algebra?

Values are placed in an object called a matrix and the actions performed on the values are called transforms

Linear algebra is optimized for parallel mathematical operations.

Page 39: 3D Math Without Presenter Notes

Data Types

vec2, vec3, vec4: 2D, 3D, and 4D floating point vector objects.

vec2: (x, y)

vec3: (x, y, z)

vec4: (r, g, b, a)

Page 40: 3D Math Without Presenter Notes

Data Types

mat2, mat3, mat4: 2, 3, and 4 element matrices.

mat2: Holds a 2 X 2 number matrix

mat3: Holds a 3 X 3 number matrix, used for 2D linear algebra

mat4: Holds a 4 X 4 number matrix, used for 3D linear algebra

Page 41: 3D Math Without Presenter Notes

Enter the Matrix

Page 42: 3D Math Without Presenter Notes

1.0 1.0 1.0 0 1.0 1.0 1.0 0 1.0 1.0 1.0 0 1.0 1.0 1.0 0

Column

Row

Page 43: 3D Math Without Presenter Notes

mat4 genericMatrix = mat4( !

1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0, 0, 0, 0

);

Column

Row

Page 44: 3D Math Without Presenter Notes

vec4 firstColumn = vec4(1.0, 1.0, 1.0, 1.0);

vec4 secondColumn = vec4(1.0, 1.0, 1.0, 1.0);

vec4 thirdColumn = vec4(1.0, 1.0, 1.0, 1.0);

vec4 fouthColumn = vec4(0, 0, 0, 0);

mat4 myMatrix = mat4( firstColumn, SecondColumn, thirdColumn, FourthColumn

);

Page 45: 3D Math Without Presenter Notes

CGAffineTransform

Page 46: 3D Math Without Presenter Notes

Affine, Wha?? :(A transform is any function that alters the size, position, or rotation of an object on your screen.

Four types: Identity, Translate, Rotation, and Scale.

For a transform to be affine, the lines in your shape must be parallel.

Page 47: 3D Math Without Presenter Notes

CGAffine Transform Methods

CGAffineTransformMakeRotation (GLFloat angle);

CGAffineTransformMakeScale (CGFLoat sx, CGFloat sy);

CGAffineTransformMakeTranslation (CGFloat tx, CGFloat ty);

Page 48: 3D Math Without Presenter Notes

struct CAAffineTransform { CGFloat a; GLFloat b; CGFloat c; CGFloat d; CGFloat tx; CGFloat ty

}

Page 49: 3D Math Without Presenter Notes

new point x = a * x + c * y + tx;

new point y = b * x + d * y + ty;

Page 50: 3D Math Without Presenter Notes

How Does This Work?

For each point in your shape, the computer uses this calculation to figure out where the point should be.

If you have a rectangle, this gets run four times: One for each point in your shape.

Page 51: 3D Math Without Presenter Notes

Refraction Fragment Shader Example

Page 52: 3D Math Without Presenter Notes

void main() { highp vec2 textureCoordinateToUse = vec2(textureCoordinate.x, (textureCoordinate.y * aspectRatio + 0.5 - 0.5 * aspectRatio)); highp float distanceFromCenter = distance(center, textureCoordinateToUse); lowp float checkForPresenceWithinSphere = step(distanceFromCenter, radius); distanceFromCenter = distanceFromCenter / radius; highp float normalizedDepth = radius * sqrt(1.0 - distanceFromCenter * distanceFromCenter); highp vec3 sphereNormal = normalize(vec3(textureCoordinateToUse - center, normalizedDepth)); highp vec3 refractedVector = 2.0 * refract(vec3(0.0, 0.0, -1.0), sphereNormal, refractiveIndex); refractedVector.xy = -refractedVector.xy; highp vec3 finalSphereColor = texture2D(inputImageTexture, (refractedVector.xy + 1.0) * 0.5).rgb; // Grazing angle lighting highp float lightingIntensity = 2.5 * (1.0 - pow(clamp(dot(ambientLightPosition, sphereNormal), 0.0, 1.0), 0.25)); finalSphereColor += lightingIntensity; // Specular lighting lightingIntensity = clamp(dot(normalize(lightPosition), sphereNormal), 0.0, 1.0); lightingIntensity = pow(lightingIntensity, 15.0); finalSphereColor += vec3(0.8, 0.8, 0.8) * lightingIntensity; gl_FragColor = vec4(finalSphereColor, 1.0) * checkForPresenceWithinSphere; }

Page 53: 3D Math Without Presenter Notes

highp vec2 textureCoordinateToUse = vec2(textureCoordinate.x, (textureCoordinate.y * aspectRatio + 0.5 - 0.5 * aspectRatio));

Page 54: 3D Math Without Presenter Notes

highp float distanceFromCenter = distance(center, textureCoordinateToUse);

Page 55: 3D Math Without Presenter Notes

lowp float checkForPresenceWithinSphere = step(distanceFromCenter, radius);

Page 56: 3D Math Without Presenter Notes

distanceFromCenter = distanceFromCenter / radius;

Page 57: 3D Math Without Presenter Notes

highp float normalizedDepth = radius * sqrt(1.0 - distanceFromCenter * distanceFromCenter);

Page 58: 3D Math Without Presenter Notes

highp vec3 sphereNormal = normalize(vec3!(textureCoordinateToUse - center, normalizedDepth));

Page 59: 3D Math Without Presenter Notes

highp vec3 refractedVector = refract(vec3(0.0, 0.0, -1.0), !sphereNormal, refractiveIndex);

Page 60: 3D Math Without Presenter Notes

 gl_FragColor = texture2D(inputImageTexture, (refractedVector.xy + 1.0) * 0.5) * checkForPresenceWithinSphere;

Page 61: 3D Math Without Presenter Notes
Page 62: 3D Math Without Presenter Notes
Page 63: 3D Math Without Presenter Notes
Page 64: 3D Math Without Presenter Notes

The End