Intro to BAScene framework for Mac
Upcoming SlideShare
Loading in...5

Intro to BAScene framework for Mac






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Intro to BAScene framework for Mac Intro to BAScene framework for Mac Presentation Transcript

  • Scene Kit You’re making a scene!Thursday, 7 March, 13
  • Thursday, 7 March, 13
  • 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 developerThursday, 7 March, 13
  • Motivations Why am I building another 3D library?Thursday, 7 March, 13
  • Thursday, 7 March, 13
  • Microserfs • 1995 • Douglas Coupland • Oop! • Virtual LEGOThursday, 7 March, 13Microsoft employees leave to form a start-up in Silicon Valley. His vision for Oop! wascompelling. 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.
  • 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 doorThursday, 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
  • 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, 13Vectors, transformation matrices, projective geometry. Ouch!OpenGL state, primitives, buffers, shader programs.I just want to stick some boxes together.
  • 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 appsThursday, 7 March, 13Still missing some fundamental features.
  • Virtual Toys Not your old LEGO setThursday, 7 March, 13Not about big-budget 3D games.
  • Example: Sim City • Build a city • Build networks: • roads • power • Build an economy • Unleash havocThursday, 7 March, 13OPTIONAL
  • Example: Minecraft • Explore a virtual world • Build things: • buildings • roads • railways • farms • monster traps • microprocessors !?Thursday, 7 March, 13OPTIONAL: Don’t waste time on this!
  • 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 cheaplyThursday, 7 March, 13Virtual 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
  • ConceptsThursday, 7 March, 13If you’re already a 3D developer, please
  • 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, 13the stage is a conceptual container, the virtual worldin
  • 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 buildThursday, 7 March, 13OPTIONAL
  • Camera • point of view • field of view, etc. • “style” of the image • fill style, blur, etc. • delegates drawingThursday, 7 March, 13POV: orientation, depth of field, field of view, dimensions, aspect ratio, focus point
  • Scene Hierarchy • Arrangement • Stage > Partition > Group > Prop • Construction • Prop > Prototype > Mesh > Polygon > Point > TupleThursday, 7 March, 13
  • Prop • a “physical” object • instance of prototype • make many copies that share the same geometry dataThursday, 7 March, 13
  • Prototype • Collection of meshes • meshes can be shared • each mesh can have a customized appearance that is unique to that prototypeThursday, 7 March, 13Transform is used to position the mesh in the prototype’s local coordinate space.I didn’t make this model!
  • Mesh • Collection of polygonsThursday, 7 March, 13
  • Polygon • Closed, flat shape • Composed of pointsThursday, 7 March, 13
  • Point • Fundamental geometric concept • Collection of tuples • location • orientation (normal) • colour • texture coordinatesThursday, 7 March, 13A tuple is a 3-element vector interpreted as a spatial co-ordinate (cartesian space, colourspace, texture space).Textures may only need 1 or 2 elements. This picture doesn’t tell you much.
  • Classes and Interfaces Object model, data types, and functionsThursday, 7 March, 13Here I’ll begin to review the concepts in reverse order
  • 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 functionsThursday, 7 March, 13a volume is a union of a size and an array of elementsadd picture of code defining Volume and Size types
  • typedef struct { typedef struct { ! CGFloat x; ! NSUInteger w; ! CGFloat y; ! NSUInteger h; ! CGFloat z; ! NSUInteger d; } BAPointf; } BASizei; typedef BAPointf BARotation3; typedef struct { ! CGFloat w; typedef union { ! CGFloat h; ! BAPointi p; ! CGFloat d; ! NSInteger i[3]; } BASizef; } BALocationi; typedef union { typedef union { ! BASizei s; ! BAPoint4f p; ! NSUInteger i[3]; ! CGFloat i[4]; } BAVolumei; } BALocationf; typedef union { typedef union { ! BASizef s; ! BARotation3 r; ! CGFloat i[3]; ! CGFloat i[3]; } BAVolumef; } BAOrientationf;Thursday, 7 March, 13
  • 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 debuggingThursday, 7 March, 13
  • Managed Object Model Custom NSManagedObject subclassesThursday, 7 March, 13
  • Model: GeometryThursday, 7 March, 13
  • Model: CompositionThursday, 7 March, 13
  • Geometric Entities • Point, Prototype and Mesh • support construction from element arrays • along with Group, support flattening back to element arraysThursday, 7 March, 13
  • Mesh • Represent complex geometric shapes • As part of a prototype, support: • appearance properties • spatial transformation • library of simple shapes providedThursday, 7 March, 13
  • Composites • Mesh, Prototype, Prop and Group • can be identified and loaded by name • organization and re-use • have bounding boxes and intersection testsThursday, 7 March, 13
  • 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 stuffThursday, 7 March, 13BATexture has an equivalent in GLKit, but Scene Kit is compatible back to 10.5
  • 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) - youngThursday, 7 March, 13Quartz 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.
  • 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 pointThursday, 7 March, 13Needs support for creating texture mapping; animations; and shaders.If you want to try it, just ask me for it.
  • Contact me • bgulanowski@gmail.comThursday, 7 March, 13
  • Thank You Time for demos and sample codeThursday, 7 March, 13