Intro to BAScene framework for Mac

271 views
218 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
271
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intro to BAScene framework for Mac

  1. 1. Scene Kit You’re making a scene!Thursday, 7 March, 13
  2. 2. Thursday, 7 March, 13
  3. 3. 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
  4. 4. Motivations Why am I building another 3D library?Thursday, 7 March, 13
  5. 5. Thursday, 7 March, 13
  6. 6. 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.
  7. 7. 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
  8. 8. 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.
  9. 9. 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.
  10. 10. Virtual Toys Not your old LEGO setThursday, 7 March, 13Not about big-budget 3D games.
  11. 11. Example: Sim City • Build a city • Build networks: • roads • power • Build an economy • Unleash havocThursday, 7 March, 13OPTIONAL
  12. 12. 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!
  13. 13. 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
  14. 14. ConceptsThursday, 7 March, 13If you’re already a 3D developer, please
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. Scene Hierarchy • Arrangement • Stage > Partition > Group > Prop • Construction • Prop > Prototype > Mesh > Polygon > Point > TupleThursday, 7 March, 13
  19. 19. Prop • a “physical” object • instance of prototype • make many copies that share the same geometry dataThursday, 7 March, 13
  20. 20. 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!
  21. 21. Mesh • Collection of polygonsThursday, 7 March, 13
  22. 22. Polygon • Closed, flat shape • Composed of pointsThursday, 7 March, 13
  23. 23. 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.
  24. 24. Classes and Interfaces Object model, data types, and functionsThursday, 7 March, 13Here I’ll begin to review the concepts in reverse order
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. Managed Object Model Custom NSManagedObject subclassesThursday, 7 March, 13
  29. 29. Model: GeometryThursday, 7 March, 13
  30. 30. Model: CompositionThursday, 7 March, 13
  31. 31. Geometric Entities • Point, Prototype and Mesh • support construction from element arrays • along with Group, support flattening back to element arraysThursday, 7 March, 13
  32. 32. Mesh • Represent complex geometric shapes • As part of a prototype, support: • appearance properties • spatial transformation • library of simple shapes providedThursday, 7 March, 13
  33. 33. 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
  34. 34. 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
  35. 35. 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.
  36. 36. 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.
  37. 37. Contact me • bgulanowski@gmail.comThursday, 7 March, 13
  38. 38. Thank You Time for demos and sample codeThursday, 7 March, 13

×