Top Banner
Scene Kit You’re making a scene! Thursday, 7 March, 13
38

Intro to BAScene framework for Mac

Jul 08, 2015

Download

Documents

bgulanowski
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Intro to BAScene framework for Mac

Scene KitYou’re making a scene!

Thursday, 7 March, 13

Page 2: Intro to BAScene framework for Mac

Thursday, 7 March, 13

Page 3: Intro to BAScene framework for Mac

Who am I?

• ambivalent coder in high school

• graduated with an English degree in 1996

• became a Mac fanatic; learned C

• hyped up for Rhapsody (OS X+Cocoa)

• back to school for Comp Sci in 2000

• now work as full-time iOS developer

Thursday, 7 March, 13

Page 4: Intro to BAScene framework for Mac

MotivationsWhy am I building another 3D library?

Thursday, 7 March, 13

Page 5: Intro to BAScene framework for Mac

Thursday, 7 March, 13

Page 6: Intro to BAScene framework for Mac

Microserfs

• 1995

• Douglas Coupland

• Oop!

• Virtual LEGO

Thursday, 7 March, 13

Microsoft employees leave to form a start-up in Silicon Valley. His vision for Oop! was compelling. I wanted it, and still do. The ideas in the book burrowed into my subconscious. And I wanted to be part of the software development world.

Page 7: Intro to BAScene framework for Mac

3D

• 3D scenes are interesting

• Some things are naturally 3-dimensional

• We experience a 3D world every day

• 3D provides a sense of realism

• 3D is creeping into app design through the side door

Thursday, 7 March, 13

“Making a scene” means to attracts attention. That’s a good thing!Apps: We have pseudo-3D icons, interfaces, pseudo-3D animationslet’s get 3D out in the open in a friendly way

Page 8: Intro to BAScene framework for Mac

3D is Too Hard

• The barrier to entry for 3D is too high.

• 3D math is too complicated.

• 3D graphics API are too complicated.

• Creating 3D content is too complicated.

• Can we make it easier?

Thursday, 7 March, 13

Vectors, transformation matrices, projective geometry. Ouch!OpenGL state, primitives, buffers, shader programs.I just want to stick some boxes together.

Page 9: Intro to BAScene framework for Mac

Hide Complexity

• Reduce or eliminate need for OpenGL

• Replace OpenGL state with Obj-C classes

• Use abstractions that feel more natural

• Provide necessary types and functions

• Take care of math drudge work

• Make it easier to make fun apps

Thursday, 7 March, 13

Still missing some fundamental features.

Page 10: Intro to BAScene framework for Mac

Virtual ToysNot your old LEGO set

Thursday, 7 March, 13

Not about big-budget 3D games.

Page 11: Intro to BAScene framework for Mac

Example: Sim City

• Build a city

• Build networks:

• roads

• power

• Build an economy

• Unleash havoc

Thursday, 7 March, 13

OPTIONAL

Page 12: Intro to BAScene framework for Mac

Example: Minecraft• Explore a virtual world

• Build things:

• buildings

• roads

• railways

• farms

• monster traps

• microprocessors !?

Thursday, 7 March, 13

OPTIONAL: Don’t waste time on this!

Page 13: Intro to BAScene framework for Mac

Beyond Games

• Games market is mature and saturated

• Interactive entertainment is bigger

• Games are too limiting; too constraining

• Toys give more freedom to explore

• Toys let you make a world in your image

• Virtual toys scale up cheaply

Thursday, 7 March, 13

Virtual toys have a lot of potential. The market could grow a lot.Examples: Sim City, Sims, MinecraftToys are for experimentation and self-directed learning.Virtual toys are not as fun as real games, but they have qualities real toys lack.With networked software, you can

Page 14: Intro to BAScene framework for Mac

Concepts

Thursday, 7 March, 13

If you’re already a 3D developer, please

Page 15: Intro to BAScene framework for Mac

Scene Kit Concepts

• A scene is made of props on a virtual stage

• A scene is integrated into a workflow:

• assemble props and arrange the scene

• capture an image (“paint it”)

• update the scene

• capture a new image, etc.

Thursday, 7 March, 13

the stage is a conceptual container, the virtual worldin

Page 16: Intro to BAScene framework for Mac

Design Patterns

• Is a scene a model or a view or both?

• depends on your point of view

• could say it’s a model of a view

• classic MVC provides a view of a model

• in a simulation, there is another model

• scenes are require tools to build

Thursday, 7 March, 13

OPTIONAL

Page 17: Intro to BAScene framework for Mac

Camera

• point of view

• field of view, etc.

• “style” of the image

• fill style, blur, etc.

• delegates drawing

Thursday, 7 March, 13

POV: orientation, depth of field, field of view, dimensions, aspect ratio, focus point

Page 18: Intro to BAScene framework for Mac

Scene Hierarchy

• Arrangement

• Stage > Partition > Group > Prop

• Construction

• Prop > Prototype > Mesh > Polygon > Point > Tuple

Thursday, 7 March, 13

Page 19: Intro to BAScene framework for Mac

Prop

• a “physical” object

• instance of prototype

• make many copies that share the same geometry data

Thursday, 7 March, 13

Page 20: Intro to BAScene framework for Mac

Prototype

• Collection of meshes

• meshes can be shared

• each mesh can have a customized appearance that is unique to that prototype

Thursday, 7 March, 13

Transform is used to position the mesh in the prototype’s local coordinate space.I didn’t make this model!

Page 21: Intro to BAScene framework for Mac

Mesh

• Collection of polygons

Thursday, 7 March, 13

Page 22: Intro to BAScene framework for Mac

Polygon

• Closed, flat shape

• Composed of points

Thursday, 7 March, 13

Page 23: Intro to BAScene framework for Mac

Point• Fundamental geometric

concept

• Collection of tuples

• location

• orientation (normal)

• colour

• texture coordinates

Thursday, 7 March, 13

A tuple is a 3-element vector interpreted as a spatial co-ordinate (cartesian space, colour space, texture space).Textures may only need 1 or 2 elements. This picture doesn’t tell you much.

Page 24: Intro to BAScene framework for Mac

Classes and InterfacesObject model, data types, and functions

Thursday, 7 March, 13

Here I’ll begin to review the concepts in reverse order

Page 25: Intro to BAScene framework for Mac

Base Types

• Structures

• point, matrix, size, region, triangle ++

• vector types often union’ed with an array (e.g.: volume for size)

• some have integer and float variations

• string transformation functions

Thursday, 7 March, 13

a volume is a union of a size and an array of elementsadd picture of code defining Volume and Size types

Page 26: Intro to BAScene framework for Mac

typedef struct {! CGFloat x;! CGFloat y;! CGFloat z;} BAPointf;

typedef BAPointf BARotation3;

typedef union {! BAPointi p;! NSInteger i[3];} BALocationi;

typedef union {! BAPoint4f p;! CGFloat i[4];} BALocationf;

typedef union {! BARotation3 r;! CGFloat i[3];} BAOrientationf;

typedef struct {! NSUInteger w;! NSUInteger h;! NSUInteger d;} BASizei;

typedef struct {! CGFloat w;! CGFloat h;! CGFloat d;} BASizef;

typedef union {! BASizei s;! NSUInteger i[3];} BAVolumei;

typedef union {! BASizef s;! CGFloat i[3];} BAVolumef;

Thursday, 7 March, 13

Page 27: Intro to BAScene framework for Mac

Utilities

• Functions for operating on structures

• Imitates functions from NSGeometry.h

• Simple operations like creation, midpoints

• Complex stuff like matrix math

• NSColor to struct transformation

• useful drawing functions for debugging

Thursday, 7 March, 13

Page 28: Intro to BAScene framework for Mac

Managed Object ModelCustom NSManagedObject subclasses

Thursday, 7 March, 13

Page 29: Intro to BAScene framework for Mac

Model: GeometryThursday, 7 March, 13

Page 30: Intro to BAScene framework for Mac

Model: CompositionThursday, 7 March, 13

Page 31: Intro to BAScene framework for Mac

Geometric Entities

• Point, Prototype and Mesh

• support construction from element arrays

• along with Group, support flattening back to element arrays

Thursday, 7 March, 13

Page 32: Intro to BAScene framework for Mac

Mesh

• Represent complex geometric shapes

• As part of a prototype, support:

• appearance properties

• spatial transformation

• library of simple shapes provided

Thursday, 7 March, 13

Page 33: Intro to BAScene framework for Mac

Composites

• Mesh, Prototype, Prop and Group

• can be identified and loaded by name

• organization and re-use

• have bounding boxes and intersection tests

Thursday, 7 March, 13

Page 34: Intro to BAScene framework for Mac

Other

• BAScene class does some high-level work

• manages object model and context

• BASceneView: custom OpenGL view

• BACameraSetup: view to control camera

• BAResourceStorage: caches GL data

• BATexture: handles GL texture stuff

Thursday, 7 March, 13

BATexture has an equivalent in GLKit, but Scene Kit is compatible back to 10.5

Page 35: Intro to BAScene framework for Mac

Alternatives

• Quartz Composer

• if you don’t want or need Objective-C:

• Ogre3D, Irrlicht, Unity, Unreal

• for iOS (could be ported to Mac OS X):

• iSGL3D - developer has abandoned

• Cocos3d (based on Cocos2d) - young

Thursday, 7 March, 13

Quartz Composer really has a different design and usage model. I’ve never really used it.There is no open-source development targeting 3D on Mac OS X.Should not need to use C++ or some bizarre C library to have fun with 3D programming.The commercial stuff is good if you want to do polished-looking 3D games.

Page 36: Intro to BAScene framework for Mac

Caveats

• Missing a lot of things

• Work progressing slowly

• I’m lazy and life is full of distractions

• Not available, not even open source

• When it’s sufficient, I’ll share SDK

• release source code at some point

Thursday, 7 March, 13

Needs support for creating texture mapping; animations; and shaders.If you want to try it, just ask me for it.

Page 37: Intro to BAScene framework for Mac

Contact me

[email protected]

Thursday, 7 March, 13

Page 38: Intro to BAScene framework for Mac

Thank You

Time for demos and sample code

Thursday, 7 March, 13