25

Designing an Objective-C Framework about 3D

  • Upload
    rsebbe

  • View
    4.185

  • Download
    1

Embed Size (px)

DESCRIPTION

Blitz T

Citation preview

Page 1: Designing an Objective-C Framework about 3D
Page 2: Designing an Objective-C Framework about 3D

Designing an Objective-C Framework about 3D

(to Rule Them All)

Raphael SebbeTwitter: @rsebbe

Page 3: Designing an Objective-C Framework about 3D
Page 4: Designing an Objective-C Framework about 3D

We all Enjoy Cocoa

Page 5: Designing an Objective-C Framework about 3D
Page 6: Designing an Objective-C Framework about 3D

Because it’s Smart & Elegant

Page 7: Designing an Objective-C Framework about 3D
Page 8: Designing an Objective-C Framework about 3D

Developers are UsersKeep that in mind when designing a framework

Page 9: Designing an Objective-C Framework about 3D

The Wonderful World of 3D

OpenGLDirect X

Ogre Quesa

OSG

OpenSG

VL

Pixar’s PRMan

3DelightPixie

Aqsis

POV

LuxRenderMental Ray

DotCLucille

3DKit

Page 10: Designing an Objective-C Framework about 3D

What

• A framework for building 3D apps / games, for Mac & iOS

• Common foundation for 3D

• Specialized to talk to various libs / tools

• Good Cocoa citizen

Page 11: Designing an Objective-C Framework about 3D

Conceptualizing (a bit)

• Computer Graphics Math

• 3D Data Representation(s)

• Object Graph(s)

• Rendering InterfacesCeedMath Foundation

Ceed3D

Ceed3DGL Ceed3DRenderMan ...

App

GL

Page 12: Designing an Objective-C Framework about 3D

Focus on Frameworks

C3ProceduralObject

C3Object

C3Node

C3GeometricObject

C3Sphere

C3Mesh

...

... C3Buffer

C3Light

C3Camera

C3Material

C3Geometry

C3ParametricGeometry

C3MeshGeometry

C3RendererC3Scene

C3StreamGeometry

C3SubdivisionGeometry

C3RenderManRenderer

C3PixarRenderer

C3AqsisRenderer

C3GLRenderer C3GLView

Page 13: Designing an Objective-C Framework about 3D

Objects Talk Together

Sphere A

1.7Value

Radius

TransformCube B

Parent Transform

TransformCube C

Size

Page 14: Designing an Objective-C Framework about 3D

Style Group 1 Style Group 2

Objects Talk Together

Sphere A

1.7Value

Radius

TransformCube B

Parent Transform

TransformCube C

Size

Page 15: Designing an Objective-C Framework about 3D

Coping with Diversity

• Objective-C is high level

• Sometimes, subclassing is your enemy

• And then, categories are your friend

• Renderer interface & file read/write’s as categories of existing classes

Page 16: Designing an Objective-C Framework about 3D

Ceed3DRenderMan.framework

Ceed3D.framework

Ceed3DGL.framework

Category Use

+GL

C3Sphere

+RenderMan

+POV

+GL

C3Mesh

+RenderMan

+Obj

+3ds

+Collada

+ ...

Page 17: Designing an Objective-C Framework about 3D

Focus on OpenGL• Modern OpenGL only (no legacy calls)

• Support for OpenGL ES

• Sophisticated Shader Definition

Page 18: Designing an Objective-C Framework about 3D

Focus on OpenGL• Modern OpenGL only (no legacy calls)

• Support for OpenGL ES

• Sophisticated Shader Definition

CeedMath

Ceed3D

Ceed3DGL

Cee

dGL

GL

• Thin Objective-C layer for OpenGL

• Encapsulates GL objects (texture, buffer, framebuffer, program, shader...)

• Defines Draw Commands

Page 19: Designing an Objective-C Framework about 3D

Cocoa Interactions

• KVO / KVC: easy access to object inputs/outputs

• Core Image: CIImage used as textures, CIFilter as post process filters on rendered image

• Quartz: NSBezierPath used as geometry source, incl. glyphs

• Quartz Composer: Ceed3D should be able to render as a QCPlugin, QC outputs usable as Ceed3D textures

• Grand Central Dispatch: Parallelism for computations

• OpenCL: Geometry filters

Page 20: Designing an Objective-C Framework about 3D

Examples! sphere = [C3Sphere sphere];! sphere.radius = 0.15;! sphere.translation.z = 0.3;!! C3GenericMaterial *material = [C3GenericMaterial genericMaterial];! material.diffuseColor = [C3Color redColor];! material.environmentImage = [C3Image imageWithContentsOfFile:! ! [[NSBundle mainBundle] pathForResource:@"skydome_1024" ofType:@"jpg"]];! sphere.defaultMaterial = material;!! [scene addNode:sphere];

!! NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect ! ! xRadius:0.1 yRadius:0.1];! [path appendBezierPath:[[NSBezierPath bezierPathWithOvalInRect:! ! NSInsetRect(rect, 0.15, 0.15)] bezierPathByReversingPath]];!! id options = [NSDictionary dictionaryWithObjectsAndKeys:C3DOUBLE(0.02), ! ! kC3MeshOptionAdaptiveSubdivisionDistance, nil];!! C3MeshGeometry *geom = [C3MeshGeometry meshGeometryWithBezierPath:path ! ! options:options];! C3Mesh *mesh = [C3Mesh mesh]; [mesh insertObject:geom inGeometriesAtIndex:0];! [scene addNode:mesh];

Page 21: Designing an Objective-C Framework about 3D

Examples! glRenderer = [C3GLRenderer new];! glRenderer.scene = scene;!! glView.viewer.camera = camera;! glRenderer.viewers = [NSArray arrayWithObject:glView.viewer];

! pixarRenderer = [C3PixarRenderer new]; ! pixarRenderer.outputDirectoryPath = @"~/Render/Ceed3D-pixar";! pixarRenderer.scene = scene;

! aqsisRenderer = [C3AqsisRenderer new];! aqsisRenderer.outputDirectoryPath = @"~/Render/Ceed3D-aqsis";! aqsisRenderer.scene = scene;

// ....

[glRenderer render];

Page 22: Designing an Objective-C Framework about 3D

Demo

Page 23: Designing an Objective-C Framework about 3D

Demo

mesh = [C3Mesh meshWithAttributedString:@"" options:nil];

Page 24: Designing an Objective-C Framework about 3D

Availability

• Work in progress

• Low-level, stable parts will be released as open source soon

• We want to release more later...

• Stay tuned!

Page 25: Designing an Objective-C Framework about 3D

Thank you!

Raphael SebbeTwitter: @rsebbe