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
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 workﬂow: • 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 • ﬁeld of view, etc. • “style” of the image • ﬁll style, blur, etc. • delegates drawingThursday, 7 March, 13POV: orientation, depth of ﬁeld, ﬁeld 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
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 ﬂoat variations • string transformation functionsThursday, 7 March, 13a volume is a union of a size and an array of elementsadd picture of code deﬁning Volume and Size types
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
Geometric Entities • Point, Prototype and Mesh • support construction from element arrays • along with Group, support ﬂattening 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 identiﬁed 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 sufﬁcient, 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 • email@example.comThursday, 7 March, 13
Thank You Time for demos and sample codeThursday, 7 March, 13