cocos3d: What’s New


Download 0.7.2


cocos3d 0.7.2

This release adds heterogeneous 3D mesh particles, enhanced UIViewController integration, ray-casting enhancements, simplified parametric vertex array allocation and management, performance and memory usage improvements, enhanced logging, and detailed GL error tracing.

Features added in this release include:

  • Added mesh particles as a type of particle system.
    • Particles can now be constructed from any template mesh, (sphere’s, boxes, planes, POD models, etc).
    • A single emitter can support particles constructed from different template meshes.
    • Mesh particles can individually move, rotate and scale in three dimensions.
    • Particles can be added manually to an emitter, effectively creating a generic mesh batching system.
    • All mesh particle vertices are manipulated in main memory and submitted to the GL engine in a single GL call.
  • Improved integration with UIView and UIViewController:
    • New CC3UIViewController class supports auto-rotation of the 3D/2D scene to the device orientation using standard UIKit auto-rotation.
    • Both iOS6 and pre-iOS6 rotation mechanisms are supported.
    • The CC3UIViewController loadView method now creates an appropriate CC3EAGLView, removing the need to create the view outside the controller in the AppDelegate.
  • Added the ability to determine the individual mesh faces, and the exact mesh location, intersected by a ray (for example from a touch).
  • Added the vertexContentTypes property to CC3MeshNodeCC3Mesh to simplify the creation of vertex arrays within a mesh. Parametric meshes (spheres, cones boxes, planes, etc.) can now be created with any type of vertex content.
  • Added several new parametric mesh population methods, including parametric cones and invisible touch-boxes.
  • Added support for bitmapped text labels as a 3D mesh.
  • Added additional camera movement and framing methods.
  • Added a build setting to provide the ability to trace GL errors to the exact GL call that triggered the error.
  • Automatic handling of textures with pre-multiplied alpha channels.
  • Memory and performance improvements including the use of minimal matrices, removal of many redundant GL calls, and the use of bitfields for most BOOLs.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in thecocos3d distribution.


Download 0.7.1


cocos3d 0.7.1

This release adds explicit support for Gesture Recognizers and includes minor enhancements and fixes to the recent significant cocos3d 0.7.0 release.

Features added in this release include:

  • Added explicit support for Gesture Recognizers, including mapping gestures to 3D transforms and coordinates.
  • Invisible nodes can now cast shadows, allowing invisible lower-polygon models to be used to create shadows of visible high-polygon models.
  • Added backward compatibility with legacy LLVM GCC 4.2 compiler.
  • Fixed memory leaks when destroying scenes containing shadows and skinned meshes.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.7.0

cocos3d 0.7.0

This release adds automatic shadowing, collision detection, ray-tracing, and enhanced texture management.

Features added in this release include:

  • Automatic shadowing using shadow volumes.
  • Enhancements to texture management:
    • Alignment of textures with meshes, for both NPOT and iOS-inverted textures is now completely automatic.
    • Texture mipmaps generation is automatic.
  • Ray-casting:
    • Collect nodes intersected by a ray in order of distance from the start of the ray.
    • Locate the local intersection of a ray with a node.
  • Simple collision detection between nodes.
  • Any node can now be targetted towards a direction, location, or other node.
  • New CCActions include MoveForwardBy, MoveUpBy, RotateByAngleAroundAxis
  • Bounding volumes of nodes can now be made visible during development.
  • Parametric mesh creation is now simplified, and parametric sphere and disk meshes now available.
  • Individual mesh faces can be retrieved by index.
  • Support for decals.
  • Support for stencil buffers.
  • Support for automatic renormalizing of rotation matrices.
  • Support for general notification callbacks on node transformations.
  • CC3World renamed to CC3Scene, to clarify the purpose of that class.
  • CC3Scene callbacks available during opening and closing of a scene.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.6.5

cocos3d 0.6.5

This is a patch release that fixes an error in the soft-body vertex skinning POD loading mechanism that was introduced in cocos3d 0.6.3. This issue affected some large and complex POD files, and caused some regular mesh nodes to be loaded as skinned nodes, which resulted in them sometimes not being rendered.

This issue affects all POD files, including those that do not contain soft-body nodes or use vertex skinning.

If you are using cocos3d 0.6.3 or cocos3d 0.6.4, it is strongly recommended that you upgrade to the 0.6.5 version.

Download 0.6.4

cocos3d 0.6.4

This is a patch release that fixes an error in the new matrix inversion algorithm that was introduced in cocos3d 0.6.3. This issue affected some vertex skinning situations, and other operations that relied on accurate matrix inversion. If you are using cocos3d 0.6.3, it is strongly recommended that you upgrade to the 0.6.4 version.

In addition, this release adds the following features:

  • Fixed error in matrix inversion calculation algorithm that affected some vertex skinning situations.
  • Added support for iOS 5.0 and Xcode 4.2.
  • Upgraded PowerVR POD library to version 2.09.
  • Removed unnecessary PowerVR POD library files.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.6.3

cocos3d 0.6.3

This release adds vertex skinning (aka bone rigging), easy configuration of repeating textures, and support for cocos2d 1.1.

Features added in this release include:

  • Added support for vertex skinning, also often referred to as bone rigging, allowing soft-body meshes to be realistically deformed based on the movement of an underlying skeleton constructed of bones and joints:
    • Soft-body models can be loaded from POD files, or constructed programmatically.
    • Skeleton bones can be controlled with animation data, or programmatically.
    • Special thanks to cocos3d user Chris Myers, who took the initiative to add vertex skinning to cocos3d, and provided much of the code.
  • Added easy control of repeating textures on a CC3MeshNode.
  • Added support for cocos2d 1.1.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.6.2

cocos3d 0.6.2

This release adds several new features, including fully-3D point particles, CC3Layer tiling, textured box nodes, and the ability to rotate a node incrementally and smoothly.

Features added in this release include:

  • Added support for 3D point particle generators:
    - Individual particles can have location, color and normal (to interact with light). Normals are automatically calculated.
    - Emitter nozzle can be attached to any node that is moving and rotating.
    - Added particle hose example to CC3DemoMashUp. Activate by touching the robot arm.
  • Added support for textured boxes and cubes.
  • Added ability to change the location and rotation of a node by a specific amount, instead of setting the final state:
    - Added CC3Node translateBy:, rotateBy:, rotateByQuaternion:, and rotateByAngle:aroundAxis: methods.
  • Added support for tiling and overlaying multiple CC3Layer/CCWorld pairs.
    - Added CC3Demo3DTiles demo app to demonstrate these features
    - Performance improvements, particularly around switching between cocos2d and cocos3d worlds, facilitating the ability to place multiple CC3Worlds on the screen at once.
  • CC3Light now makes it easy to use many lights across multiple CC3Worlds without breaking OpenGL limit on the number of lights.
  • Added support for alpha testing when working with many overlapping translucent or transparent objects and textures.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.6.1

cocos3d 0.6.1

The focus of this release was to continue to refine 3D behaviour and performance based on user feedback.

Features added in this release include:

  • Added several new diagnostic features to help developers:
    • Toggle a visible descriptive text identifier on any node.
    • Toggle a wireframe box surrounding any node.
    • Auto-move camera to view entire scene, or focus on a single node.
    • Compiler switch to log details of POD file contents loading.
    • Easily log the node structure of a node assembly or the entire world.
  • CC3Billboards drawing cocos2d 2D nodes can now be fully embedded in the 3D world, and can be:
    • Occluded by other 3D nodes.
    • Rotated to face away from the camera.
    • Selected by touch events.
  • Added ability to rotate a node around an arbitrary axis.
  • Added enhancements to CC3TargettingNode tracking:
    • Targetting nodes can be set to automatically find and track the camera.
    • Added convenience methods to allow nodes to be quickly wrapped in a targetting node.
    • Targettting nodes now track correctly if either the target or the targetting node moves.
  • Added support for using texture atlases & sprite-sheets with 3D meshes.
  • Simplified retention of vertex data in main memory. Added methods to CC3Node to identify which vertex data should be retained in main memory.
  • Added vertex data access methods to simplify direct manipulation of vertex data.
  • Added userData property to node to allow application to add arbitrary data to nodes without having to create subclasses.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback. For more complete and detailed information on what’s new in this release, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.6 Sneak Peek

cocos3d 0.6 Sneak Peek

An early version of 0.6 is now available. It contains all the features planned for version 0.6, with the exception of a full 3D particle system, which is still under development. For that reason, we are calling this release the 0.6 Sneak Peek (0.6.0-sp). The full version of 0.6, including 3D particles, will be released within the next few weeks.

This sneak peek release is not an alpha or beta release. It is the full 0.6 release, minus the 3D particles.

Features added in this release include:

  • Multi-texturing, using multiple texture-units to combine textures on a material in flexible, customized fashion, permitting sophisticated surface effects.
  • DOT3 bump-map texturing, for increased surface detail on models without having to increase the number of vertices.
  • CC3Billboard now supports cocos2d 2D particle systems, including those created with Particle Designer, plus any other 2D CCNodes that are undergoing scheduled updates.
  • Any 3D node can be added as a child to an instance of CC3TargettingNode to make that node face the camera (halo objects), or another node, and automatically track that node as it moves. The axis of rotation can be restricted to a single axis to allow the node to rotate to face the camera or another node, but only along one axis.
  • CC3TargettingNodes will now automatically track their targets once the shouldTrackTarget property is set to YES. The trackTarget method no longer needs to be invoked during udpates.
  • Lighting enhancements include spotlights and attenuation with distance.
  • Fog effects can be applied to the world.
  • Node picking now works when multi-sampling anti-aliasing is active.
  • CC3Layer can now be dynamically moved (using CCActions for example) if it is smaller than the full-screen, allowing your whole 3D world to move around within a cocos2D application.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback, and there have been several small changes to the API with this release. For more complete and detailed information on what’s new in this release, including changes to the API, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.5.4

cocos3d 0.5.4

The focus of this release was to continue to refine basic 3D behaviour and performance based on user feedback after the initial releases, including adding support for parallel/isometric/orthographic projection, and rendering the backfaces of a mesh.

  • CC3Camera now supports a isUsingParallelProjection property parallel/isometric/orthographic projection in addition to the default perspective projection.
  • Using the shouldCullBackFaces and shouldCullFrontFaces properties of CC3Node, you can choose whether a mesh should display backfaces in addition to, or instead of, the usual frontfaces.
  • Using the retainVertexLocations method, you can instruct a particular CC3Node to retain its vertex locations in application memory when releaseRedundantData is invoked, so that the vertex data is available for use in calculations, even after the data has been copied to GL buffer memory.
  • CC3NodeArrayZOrderSequencer now supports sorting nodes for drawing based on the Z-distance as measured straight-out from the camera, ignoring distance contributed from a node being off to the side of the center of the camera’s view. This is selectable using the shouldUseOnlyForwardDistance property, and is useful for planar cell animation using large textures that are perpendicular to the camera. The existing ability of sorting based on a straight-line 3D distance between the camera and the node is also available.
  • To simplify changing the active CC3World instance during 3D scene changes, the AppDelegate class of the hello, world templates, plus the CC3DemoMashUp and CC3Performance demo apps, no longer keep track of a CC3World instance. Swapping the CC3World instance is now accomplished by simply setting the cc3World property of your customized CC3Layer, and it is left to the application to manage caches of different CC3World instances, and memory consumption, in a way that is most convenient for the application.
  • In order to create a consistent and easy standard, the CC3Camera nearClippingPlane now defaults to 1.0, and the farClippingPlane now defaults to 1000.0.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback, and there have been several small changes to the API with this release. For more complete and detailed information on what’s new in this release, including changes to the API, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.5.3

cocos3d 0.5.3

The focus of this release was to continue to refine basic 3D behaviour and performance based on user feedback after the initial releases, including adding an Xcode 4 project template, performance improvements, a performance measurement API, and a performance-measuring demo application.

  • An Xcode 4 cocos3d project template in now included (The Xcode 4 project template requires an additional project creation step. See the README! file in your Xcode 4 project after creating it from the project template).
  • Added support for positioning objects by 2D touch point location. You can extrapolate a touch point on the screen to a ray in the 3D world, and a specific 3D location on an arbitrary plane. Added CC3Camera methods unprojectPoint: and unprojectPoint:ontoPlane: to support this feature.
  • Added method addAndLocalizeChild: to CC3Node to add objects of known size and rotation to a node, without having those properties immediately affected by the transform of the parent object. This is useful when adding an object of known location, rotation and scale to another object that is rotated and scaled arbitrarily, and retaining the known location, rotation and scale of the added child.
  • Performance improvements.
  • CC3World now optionally collects application drawing and updating performance statistics in the performanceStatistics property.
  • New demo project CC3Performance now available for developers to explore cocos3d performance characteristics with various types of 3D models.
  • Changing the scale of CC3Camera (through either the scale or uniformScale properties) now updates the projectionMatrix automatically.
  • Added CC3BoxNode as subclass of CC3MeshNode to simplify the creation of cube and box meshes.
  • Added line population methods to CC3LineNode.
  • Setting the CC3Material isOpaque property to NO now checks for pre-multiplied alpha in the texture and sets the sourceBlend property accordingly.
  • API docs now includes a collaboration diagram for each class, plus an overall library class hierarchy diagram.
  • The hello, world project template now uses a mesh with fewer vertices to improve performance on older devices.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback, and there have been several small changes to the API with this release. For more complete and detailed information on what’s new in this release, including changes to the API, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.5.2

cocos3d 0.5.2

The focus of this release was to continue to refine basic 3D behaviour based on user feedback after the initial release, including adding support for the high-resolution Retina display, automatic drawing of translucent 3D objects in Z-order, and explicit support for drawing lines and planes.

  • The 3D world now displays correctly on a high-resolution Retina display.
  • Added CC3NodeArrayZOrderSequencer to allow the drawing of translucent objects to be sorted by Z-order, using the center of the node mesh, from farthest to nearest. CC3World‘s default drawingSequencer now draws opaque nodes first, then translucent nodes by Z-order.
  • CC3LineNode and CC3PlaneNode classes added as subclasses of CC3MeshNode to simplify the creation and drawing of lines and planes using vertex arrays. Added method populateAsWireBox:withPureColor: to CC3MeshNode as a convenience method for easily creating wire-frame boxes.
  • Node opacity control has been simplified. Changing the opacity of a CC3Material (or any node holding it) using the <CCRGBAProtocol> opacity property now automatically changes the sourceBlend and destinationBlend properties to make use of the new opacity. The isOpaque property of CC3Material and CC3MeshNode now takes into consideration the alpha component of ambientColor and diffuseColor properties as well as the sourceBlend and destinationBlend properties.
  • Meshes can now be drawn in a pure, solid color that is not affected by lighting conditions.
  • Added features to the CC3DemoMashUp example to demonstrate some of the changes above:
    • Touching either the textured or rainbow teapot will toggle the display of a wire-frame of the teapot’s bounding box.
    • Touching the beach ball toggles the it between opacity and translucency.
    • The translucent beach ball now correctly displays the robot arm behind it, and no longer flickers during touch event processing when it has 3D objects behind it (not just the empty sky).

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback, and there have been several small changes to the API with this release. For more complete and detailed information on what’s new in this release, including changes to the API, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.5.1-beta

cocos3d 0.5.1-beta

The focus of this release was to adjust and solidify behaviour based on user feedback after the initial release, including adding 3D touch support and easy duplication of 3D models.

  • Any visible 3D node can now respond to touch events, and the application can receive callbacks when a node is selected. Individual nodes can be marked as touch-responsive, or not. Node assemblies can be configured to select either the entire assembly or individual components, when a touch event occurs.
  • All 3D nodes now support the <NSCopying> protocol. Creating multiple copies of a 3D model is now simply a matter of invoking the copy method. The original and new nodes can be moved, rotated, scaled, animated, colored, or textured independently. But fear not, to preserve memory, underlying mesh data is shared between copies.
  • Fractional animation is now supported. Any fraction of the full animation data may be played. For example, if a single animation contains several movements, each movement can be played separately.
  • All 3D nodes now support animation. Previously, only nodes loaded from POD files could be animated.
  • All 3D nodes, including node assemblies, support the <CCRGBAProtocol> protocol, plus material coloring properties, to allow fading or tinting of complete node assemblies.
  • Applications now have more control over releasing mesh data from main memory once it has been copied into OpenGL ES VBOs. The release of main memory data is no longer automatic when VBO’s are created.

In addition to these main features, this release includes a number of fixes and adjustments based on user feedback, and there have been a number of small changes to the API with this release. For more complete and detailed information on what’s new in this release, including changes to the API, we encourage you to read the CHANGELOG document in the cocos3d distribution.

Download 0.5-beta

cocos3d 0.5-beta

This is the initial release.

  • Seamless integration with cocos2d. Rendering of all 3D model objects occurs within a special cocos2d layer, which fits seamlessly into the cocos2d node hierarchy, allowing 2D nodes such as controls, labels, and health bars to be drawn under, over, or beside 3D model objects. With this design, 2D objects, 3D objects, and sound can interact with each other to create a rich, synchronized audio-visual experience.
  • Pluggable loading framework for 3D models exported from familiar 3D editors such as Blender, 3ds Max or Cheetah3D, or through industry standard 3D object files such as Collada or PowerVR POD, or even from your own customized object file formats.
  • Imported 3D models can include animation sequences.
  • 3D model objects can be arranged in sophisticated structural assemblies, allowing child objects to be moved and oriented relative to their parent structure.
  • 3D models, cameras, and lighting can be manipulated and animated using familiar cocos2d Actions, allowing you to quickly and easily control the dynamics of your 3D world, in a familiar, and easy-to-use programming paradigm.
  • 3D objects can be covered with dynamic materials and textures to create rich, realistic imagery.
  • Mesh data can be shared between 3D objects, thereby saving precious device memory.
  • Mesh data can freely, and automatically, use OpenGL vertex buffer objects to improve performance and memory management.
  • Culling of 3D objects outside of the camera frustum is automatic, based on pluggable, customizable object bounding volumes.
  • Automatic ordering and grouping of 3D objects minimizes OpenGL state changes and improves rendering performance. Pluggable sorters allow easy customization of object sorting, ordering, and grouping for optimal application performance.
  • Automatic OpenGL state machine shadowing means that the OpenGL functions are invoked only when a state really has changed, thereby reducing OpenGL engine calls, and increasing OpenGL throughput.
  • Sophisticated math library eliminates the need to use OpenGL ES function calls for matrix mathematics.
  • Fully documented API written entirely in familiar Objective-C. No need to switch to C or C++ to work with 3D artifacts.
  • Extensive logging framework to trace program execution, including all OpenGL ES function calls.
  • Includes demo applications and Xcode templates to get you up and running quickly.