SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
droidcon 2013, Berlin




     GamePlay3D: the versatile cross-
      platform 3D game framework
                        Mihail Ivanchev
Overview



  • GamePlay3D is an open-source 3D game
    framework supporting numerous platforms.
Overview



  • GamePlay3D is an open-source 3D game
    framework supporting numerous platforms.

  • Quick facts:
      – Apache 2.0 license; free for all usage types
      – The development is supported by BlackBerry
      – The development language is C++
      – Declarative nature for rapid development
      – Targets independent developers
Motivation



   • There are open-source frameworks for the
     development of cross-platform 2D games.

   • For 3D games however the choice is mostly
     among proprietary technologies such as
     Unity3D and Adobe AIR.

   • Flexible, simple, solid design. Intuitive API
     with focus on productivity.
History



   • Initially a private research project known as
     Octane3D, a cross-platform engine featuring
     intuitive tools and a clean API.

   • Envisioned and developed by the duo Sean Paul
     Taylor and Steve Grenier in their spare time while
     working for BlackBerry.

   • In 2012 BlackBerry offers to support the
     development of the framework to enhance the
     feature set.
Features



   •   Flexible 3D scene graph.
   •   Material system.
   •   Particle system.
   •   Terrain rendering.
   •   Themable GUI system.
   •   3D physics and collision detection.
   •   AI state machine.
   •   Lua scripting.
Declarative nature



   • Many code structures in GamePlay3D can be
     build up declaratively using text files.
           Structure type            File extension
           Configuration files       .config
           Scene definitions         .scene
           Collision definitions     .physics
           Animation definitions     .animation
           Audio asset definitions   .audio
           Particle systems          .particle
           GUI forms                 .form
           GUI themes                .theme
Declarative nature



   • Many code structures in GamePlay3D can be
     build up declaratively using text files.
       Animation:                           Configuration:
       animation animations                 window
       {                                    {
           frameCount = 1100                    title = Character
           clip idle                            width = 1280
           {                                    height = 720
               begin = 27                       fullscreen = false
               end = 167                        samples = 2
               repeatCount =   INDEFINITE   }
               loopBlendTime   = 250
           }                                aliases
           clip walking                     {
           {                                    backboard = res/dxt/backboard.dds
               begin = 274                      basketball = res/dxt/basketball.dds
               end = 298                        book = res/dxt/book.dds
               repeatCount =   INDEFINITE       ...
           }                                    toybox = res/dxt/toybox.dds
           clip running                         walleast = res/dxt/walleast.dds
           {                                    wallnorth = res/dxt/wallnorth.dds
               begin = 331                      walloverhang = res/dxt/walloverhang.dds
               end = 346                        wallsouth = res/dxt/wallsouth.dds
               repeatCount =   INDEFINITE       wallwest = res/dxt/wallwest.dds
           }                                    windowledge = res/dxt/windowledge.dds
           clip runningLeft                     wood = res/dxt/wood.dds
           {                                    woodn = res/dxt/woodn.dds
               begin = 899                  }
               end = 915
               repeatCount =   INDEFINITE   gamepads
           }                                {
           ...                                  form = res/common/gamepad.form
       }                                    }
Technical



   • GamePlay3D is fully C++, not a single Java file
     is required on Android.



                                         Since Android 2.3!
Technical



   • GamePlay3D is fully C++, not a single Java file
     is required on Android.
   • OpenGL 3 used on desktop and OpenGL ES 2
     used on mobile targets.
   • API support for native features: multi-touch,
     accelerometer, file system access etc.
   • Different methods for interacting with
     platform-specific code: e.g. JNI on Android.
Material system



   • The material defines how a piece of geometry
     is rendered on screen.

                                  Material



                   PASS 1      PASS 2           PASS N
             Render state   Render state     Render state

             Vert. shader   Vert. shader     Vert. shader
             Frag. shader   Frag. shader     Frag. shader

       Technique
Material system



     • The material defines how a piece of geometry
       is rendered on screen.
 material duck
 {
     technique
     {
         pass 0
         {
             vertexShader = res/shaders/textured.vert
             fragmentShader = res/shaders/textured.frag
             defines = SPECULAR

             sampler u_diffuseTexture
             {
                 path = res/duck-diffuse.png
                 mipmap = true
                 wrapS = CLAMP
                 wrapT = CLAMP
                 minFilter = NEAREST_MIPMAP_LINEAR
                 magFilter = LINEAR
             }

             renderState
             {
                 cullFace = true
                 depthTest = true
             }

             u_cameraPosition = CAMERA_WORLD_POSITION
             u_ambientColor = 0.2, 0.2, 0.2
             u_lightColor = 0.75, 0.75, 0.75
             u_specularExponent = 50
             u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
             u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
         }
     }
 }
Material system



   • The material defines how a piece of geometry
     is rendered on screen.
   • Flexible interaction with the shader uniforms
     through material parameters.
GUI system



  • Supports several control types.
GUI system



      • Supports several control types.
form particleEditor
{
    theme = res/editor.theme
    autoWidth = true
    autoHeight = true

    container presets
    {
        style = basic
        layout = LAYOUT_VERTICAL
        position = 0, 0
        size = 160, 220

       label title
       {
           style = title
           size = 140, 30
           text = Presets
       }

       radioButton spiralFlame
       {
          style = iconNoBorder
          text = Fire
          group = presets
          size = 140, 40
          imageSize = 35, 35
          selected = true
       }
       ...
    }
    ...
}
GUI system



  • Supports several control types.
  • Flexible theming mechanism.
       theme particleEditor                            style basic
       {                                               {
           texture = res/editor.png                        stateNormal
                                                           {
           imageList normalImages                              skin = mainNormal
           {                                                   imageList = normalImages
               color = #4A8799ff
               ...                                               font = res/arial18.gpb
           }                                                     textColor = #ffffffff
           imageList activeImages : normalImages                 fontSize = 18
           {                                                     textAlignment = ALIGN_VCENTER_HCENTER
               color = #C3D9BFff                             }
               ...
           }                                                 stateActive
           skin mainNormal                                   {
           {                                                     imageList = activeImages
               border                                        }
               {                                       }
                   left = 10
                   right = 10                          ...
                   top = 10                        }
                   bottom = 10
               }

              region = 1, 1, 74, 74
              color = #4A8799ff
           }
           skin mainActive : mainNormal
           {
               color = #C3D9BFff
           }
Physics & Collision Detection




   •   Wraps the Bullet physics library.
   •   Provides standard rigid body simulation.
   •   Provides game character and vehicle models.
   •   Provides ray and hit testing.
Particle System



   •   Supports many particle attributes.
   •   Supports animated particles.
   •   Lacks support for particle collisions.
   •   A simple editor is provided as a sample.
Asset Management



  • gameplay-encoder – a command-line tool for
    packing game assets to a binary file package.
      – (.TTF) True-type fonts
      – (.FBX) Autodesk’s 3D scene format

   gameplay-encoder -s 14 Futura-Medium.ttf futura-med.gpb
   gameplay-encoder -oa –tb sphere Level1-Tutorial.fbx lev1-tut.gpb
Asset Management



  • gameplay-encoder – a command-line tool for
    packing game assets to a binary file package.
      – (.TTF) True-type fonts
      – (.FBX) Autodesk’s 3D scene format


  • Other formats are supported directly.
      – Standard image formats
      – Standard audio formats
Lua Scripting & Language Bindings



   • Lua scripting is done by specifying Lua
     handlers for predefined or custom events.
                      scripts
                      {
                          initialize = res/script.lua#initialize
 Game config:             update = res/script.lua#update
                          render = res/script.lua#render
                          finalize = res/script.lua#finalize
                      }




 Lua script:
Lua Scripting & Language Bindings



   • Lua scripting is done by specifying Lua
     handlers for predefined or custom events.
   • Additional interaction possible through the
     game’s script controller.

   • Additional language bindings available for the
     cross-compiled language Haxe.

      https://github.com/MIvanchev/hx-gameplay
Documentation and development environments



   •   GamePlay3D is well documented.
   •   All C++ environments usable.
   •   All Lua environments usable.
   •   Command line tools for packaging and
       deployment.
Questions




            Thank you for your time!

Weitere ähnliche Inhalte

Was ist angesagt?

Fields in Core: How to create a custom field
Fields in Core: How to create a custom fieldFields in Core: How to create a custom field
Fields in Core: How to create a custom fieldIvan Zugec
 
MTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APIMTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APISix Apart KK
 
Magicke metody v Pythonu
Magicke metody v PythonuMagicke metody v Pythonu
Magicke metody v PythonuJirka Vejrazka
 
Drizzles Approach To Improving Performance Of The Server
Drizzles  Approach To  Improving  Performance Of The  ServerDrizzles  Approach To  Improving  Performance Of The  Server
Drizzles Approach To Improving Performance Of The ServerPerconaPerformance
 
ATK 'Beyond The Pizza Guides'
ATK 'Beyond The Pizza Guides'ATK 'Beyond The Pizza Guides'
ATK 'Beyond The Pizza Guides'Ibuildings
 
Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Will Button
 
Devs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingDevs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingFabio Akita
 
Saving Gaia with GeoDjango
Saving Gaia with GeoDjangoSaving Gaia with GeoDjango
Saving Gaia with GeoDjangoCalvin Cheng
 
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...Eelco Visser
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Karsten Dambekalns
 
Django101 geodjango
Django101 geodjangoDjango101 geodjango
Django101 geodjangoCalvin Cheng
 
Getting Visual with Ruby Processing
Getting Visual with Ruby ProcessingGetting Visual with Ruby Processing
Getting Visual with Ruby ProcessingRichard LeBer
 
PyData NYC 2019
PyData NYC 2019PyData NYC 2019
PyData NYC 2019Li Jin
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Fabien Potencier
 

Was ist angesagt? (17)

Fields in Core: How to create a custom field
Fields in Core: How to create a custom fieldFields in Core: How to create a custom field
Fields in Core: How to create a custom field
 
MTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APIMTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new API
 
Magicke metody v Pythonu
Magicke metody v PythonuMagicke metody v Pythonu
Magicke metody v Pythonu
 
Drizzles Approach To Improving Performance Of The Server
Drizzles  Approach To  Improving  Performance Of The  ServerDrizzles  Approach To  Improving  Performance Of The  Server
Drizzles Approach To Improving Performance Of The Server
 
HTML5 Canvas
HTML5 CanvasHTML5 Canvas
HTML5 Canvas
 
ATK 'Beyond The Pizza Guides'
ATK 'Beyond The Pizza Guides'ATK 'Beyond The Pizza Guides'
ATK 'Beyond The Pizza Guides'
 
Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Mongo db mug_2012-02-07
Mongo db mug_2012-02-07
 
Devs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingDevs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented Programming
 
Saving Gaia with GeoDjango
Saving Gaia with GeoDjangoSaving Gaia with GeoDjango
Saving Gaia with GeoDjango
 
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...
Model-Driven Software Development - Pretty-Printing, Editor Services, Term Re...
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
 
Django101 geodjango
Django101 geodjangoDjango101 geodjango
Django101 geodjango
 
Getting Visual with Ruby Processing
Getting Visual with Ruby ProcessingGetting Visual with Ruby Processing
Getting Visual with Ruby Processing
 
PyData NYC 2019
PyData NYC 2019PyData NYC 2019
PyData NYC 2019
 
Xdebug confoo11
Xdebug confoo11Xdebug confoo11
Xdebug confoo11
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3
 
Perl object ?
Perl object ?Perl object ?
Perl object ?
 

Ähnlich wie Slides mihail-ivanchev-1

Ember.js Tokyo event 2014/09/22 (English)
Ember.js Tokyo event 2014/09/22 (English)Ember.js Tokyo event 2014/09/22 (English)
Ember.js Tokyo event 2014/09/22 (English)Yuki Shimada
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconftutorialsruby
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconftutorialsruby
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source codeAndrey Karpov
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source codePVS-Studio
 
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientTh 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientBin Shao
 
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...Sencha
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to CodingFabio506452
 
Introduction to Computer graphics
Introduction to Computer graphicsIntroduction to Computer graphics
Introduction to Computer graphicsLOKESH KUMAR
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorNick Pruehs
 
The Ring programming language version 1.5.3 book - Part 48 of 184
The Ring programming language version 1.5.3 book - Part 48 of 184The Ring programming language version 1.5.3 book - Part 48 of 184
The Ring programming language version 1.5.3 book - Part 48 of 184Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 58 of 184
The Ring programming language version 1.5.3 book - Part 58 of 184The Ring programming language version 1.5.3 book - Part 58 of 184
The Ring programming language version 1.5.3 book - Part 58 of 184Mahmoud Samir Fayed
 
There's more than web
There's more than webThere's more than web
There's more than webMatt Evans
 
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Webbeyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than WebHeiko Behrens
 
Computer graphics
Computer graphicsComputer graphics
Computer graphicsamitsarda3
 
iOS Visual F/X Using GLSL
iOS Visual F/X Using GLSLiOS Visual F/X Using GLSL
iOS Visual F/X Using GLSLDouglass Turner
 
Silverlight as a Gaming Platform
Silverlight as a Gaming PlatformSilverlight as a Gaming Platform
Silverlight as a Gaming Platformgoodfriday
 

Ähnlich wie Slides mihail-ivanchev-1 (20)

Graphics in C++
Graphics in C++Graphics in C++
Graphics in C++
 
Ember.js Tokyo event 2014/09/22 (English)
Ember.js Tokyo event 2014/09/22 (English)Ember.js Tokyo event 2014/09/22 (English)
Ember.js Tokyo event 2014/09/22 (English)
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
Chapter 1
Chapter 1Chapter 1
Chapter 1
 
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientTh 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
 
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to Coding
 
Introduction to Computer graphics
Introduction to Computer graphicsIntroduction to Computer graphics
Introduction to Computer graphics
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal Editor
 
The Ring programming language version 1.5.3 book - Part 48 of 184
The Ring programming language version 1.5.3 book - Part 48 of 184The Ring programming language version 1.5.3 book - Part 48 of 184
The Ring programming language version 1.5.3 book - Part 48 of 184
 
The Ring programming language version 1.5.3 book - Part 58 of 184
The Ring programming language version 1.5.3 book - Part 58 of 184The Ring programming language version 1.5.3 book - Part 58 of 184
The Ring programming language version 1.5.3 book - Part 58 of 184
 
Shaders in Unity
Shaders in UnityShaders in Unity
Shaders in Unity
 
There's more than web
There's more than webThere's more than web
There's more than web
 
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Webbeyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
 
Computer graphics
Computer graphicsComputer graphics
Computer graphics
 
iOS Visual F/X Using GLSL
iOS Visual F/X Using GLSLiOS Visual F/X Using GLSL
iOS Visual F/X Using GLSL
 
Silverlight as a Gaming Platform
Silverlight as a Gaming PlatformSilverlight as a Gaming Platform
Silverlight as a Gaming Platform
 

Mehr von Droidcon Berlin

Droidcon de 2014 google cast
Droidcon de 2014   google castDroidcon de 2014   google cast
Droidcon de 2014 google castDroidcon Berlin
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limitsDroidcon Berlin
 
Android industrial mobility
Android industrial mobility Android industrial mobility
Android industrial mobility Droidcon Berlin
 
From sensor data_to_android_and_back
From sensor data_to_android_and_backFrom sensor data_to_android_and_back
From sensor data_to_android_and_backDroidcon Berlin
 
new_age_graphics_android_x86
new_age_graphics_android_x86new_age_graphics_android_x86
new_age_graphics_android_x86Droidcon Berlin
 
Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building AndroidDroidcon Berlin
 
Matchinguu droidcon presentation
Matchinguu droidcon presentationMatchinguu droidcon presentation
Matchinguu droidcon presentationDroidcon Berlin
 
Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Droidcon Berlin
 
The artofcalabash peterkrauss
The artofcalabash peterkraussThe artofcalabash peterkrauss
The artofcalabash peterkraussDroidcon Berlin
 
Raesch, gries droidcon 2014
Raesch, gries   droidcon 2014Raesch, gries   droidcon 2014
Raesch, gries droidcon 2014Droidcon Berlin
 
Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Droidcon Berlin
 
20140508 quantified self droidcon
20140508 quantified self droidcon20140508 quantified self droidcon
20140508 quantified self droidconDroidcon Berlin
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devicesDroidcon Berlin
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradioDroidcon Berlin
 
Droidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon Berlin
 

Mehr von Droidcon Berlin (20)

Droidcon de 2014 google cast
Droidcon de 2014   google castDroidcon de 2014   google cast
Droidcon de 2014 google cast
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
 
crashing in style
crashing in stylecrashing in style
crashing in style
 
Raspberry Pi
Raspberry PiRaspberry Pi
Raspberry Pi
 
Android industrial mobility
Android industrial mobility Android industrial mobility
Android industrial mobility
 
Details matter in ux
Details matter in uxDetails matter in ux
Details matter in ux
 
From sensor data_to_android_and_back
From sensor data_to_android_and_backFrom sensor data_to_android_and_back
From sensor data_to_android_and_back
 
droidparts
droidpartsdroidparts
droidparts
 
new_age_graphics_android_x86
new_age_graphics_android_x86new_age_graphics_android_x86
new_age_graphics_android_x86
 
5 tips of monetization
5 tips of monetization5 tips of monetization
5 tips of monetization
 
Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
 
Matchinguu droidcon presentation
Matchinguu droidcon presentationMatchinguu droidcon presentation
Matchinguu droidcon presentation
 
Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3
 
The artofcalabash peterkrauss
The artofcalabash peterkraussThe artofcalabash peterkrauss
The artofcalabash peterkrauss
 
Raesch, gries droidcon 2014
Raesch, gries   droidcon 2014Raesch, gries   droidcon 2014
Raesch, gries droidcon 2014
 
Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Android open gl2_droidcon_2014
Android open gl2_droidcon_2014
 
20140508 quantified self droidcon
20140508 quantified self droidcon20140508 quantified self droidcon
20140508 quantified self droidcon
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devices
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradio
 
Droidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicro
 

Kürzlich hochgeladen

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Kürzlich hochgeladen (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

Slides mihail-ivanchev-1

  • 1. droidcon 2013, Berlin GamePlay3D: the versatile cross- platform 3D game framework Mihail Ivanchev
  • 2. Overview • GamePlay3D is an open-source 3D game framework supporting numerous platforms.
  • 3. Overview • GamePlay3D is an open-source 3D game framework supporting numerous platforms. • Quick facts: – Apache 2.0 license; free for all usage types – The development is supported by BlackBerry – The development language is C++ – Declarative nature for rapid development – Targets independent developers
  • 4. Motivation • There are open-source frameworks for the development of cross-platform 2D games. • For 3D games however the choice is mostly among proprietary technologies such as Unity3D and Adobe AIR. • Flexible, simple, solid design. Intuitive API with focus on productivity.
  • 5. History • Initially a private research project known as Octane3D, a cross-platform engine featuring intuitive tools and a clean API. • Envisioned and developed by the duo Sean Paul Taylor and Steve Grenier in their spare time while working for BlackBerry. • In 2012 BlackBerry offers to support the development of the framework to enhance the feature set.
  • 6. Features • Flexible 3D scene graph. • Material system. • Particle system. • Terrain rendering. • Themable GUI system. • 3D physics and collision detection. • AI state machine. • Lua scripting.
  • 7. Declarative nature • Many code structures in GamePlay3D can be build up declaratively using text files. Structure type File extension Configuration files .config Scene definitions .scene Collision definitions .physics Animation definitions .animation Audio asset definitions .audio Particle systems .particle GUI forms .form GUI themes .theme
  • 8. Declarative nature • Many code structures in GamePlay3D can be build up declaratively using text files. Animation: Configuration: animation animations window { { frameCount = 1100 title = Character clip idle width = 1280 { height = 720 begin = 27 fullscreen = false end = 167 samples = 2 repeatCount = INDEFINITE } loopBlendTime = 250 } aliases clip walking { { backboard = res/dxt/backboard.dds begin = 274 basketball = res/dxt/basketball.dds end = 298 book = res/dxt/book.dds repeatCount = INDEFINITE ... } toybox = res/dxt/toybox.dds clip running walleast = res/dxt/walleast.dds { wallnorth = res/dxt/wallnorth.dds begin = 331 walloverhang = res/dxt/walloverhang.dds end = 346 wallsouth = res/dxt/wallsouth.dds repeatCount = INDEFINITE wallwest = res/dxt/wallwest.dds } windowledge = res/dxt/windowledge.dds clip runningLeft wood = res/dxt/wood.dds { woodn = res/dxt/woodn.dds begin = 899 } end = 915 repeatCount = INDEFINITE gamepads } { ... form = res/common/gamepad.form } }
  • 9. Technical • GamePlay3D is fully C++, not a single Java file is required on Android. Since Android 2.3!
  • 10. Technical • GamePlay3D is fully C++, not a single Java file is required on Android. • OpenGL 3 used on desktop and OpenGL ES 2 used on mobile targets. • API support for native features: multi-touch, accelerometer, file system access etc. • Different methods for interacting with platform-specific code: e.g. JNI on Android.
  • 11. Material system • The material defines how a piece of geometry is rendered on screen. Material PASS 1 PASS 2 PASS N Render state Render state Render state Vert. shader Vert. shader Vert. shader Frag. shader Frag. shader Frag. shader Technique
  • 12. Material system • The material defines how a piece of geometry is rendered on screen. material duck { technique { pass 0 { vertexShader = res/shaders/textured.vert fragmentShader = res/shaders/textured.frag defines = SPECULAR sampler u_diffuseTexture { path = res/duck-diffuse.png mipmap = true wrapS = CLAMP wrapT = CLAMP minFilter = NEAREST_MIPMAP_LINEAR magFilter = LINEAR } renderState { cullFace = true depthTest = true } u_cameraPosition = CAMERA_WORLD_POSITION u_ambientColor = 0.2, 0.2, 0.2 u_lightColor = 0.75, 0.75, 0.75 u_specularExponent = 50 u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX } } }
  • 13. Material system • The material defines how a piece of geometry is rendered on screen. • Flexible interaction with the shader uniforms through material parameters.
  • 14. GUI system • Supports several control types.
  • 15. GUI system • Supports several control types. form particleEditor { theme = res/editor.theme autoWidth = true autoHeight = true container presets { style = basic layout = LAYOUT_VERTICAL position = 0, 0 size = 160, 220 label title { style = title size = 140, 30 text = Presets } radioButton spiralFlame { style = iconNoBorder text = Fire group = presets size = 140, 40 imageSize = 35, 35 selected = true } ... } ... }
  • 16. GUI system • Supports several control types. • Flexible theming mechanism. theme particleEditor style basic { { texture = res/editor.png stateNormal { imageList normalImages skin = mainNormal { imageList = normalImages color = #4A8799ff ... font = res/arial18.gpb } textColor = #ffffffff imageList activeImages : normalImages fontSize = 18 { textAlignment = ALIGN_VCENTER_HCENTER color = #C3D9BFff } ... } stateActive skin mainNormal { { imageList = activeImages border } { } left = 10 right = 10 ... top = 10 } bottom = 10 } region = 1, 1, 74, 74 color = #4A8799ff } skin mainActive : mainNormal { color = #C3D9BFff }
  • 17. Physics & Collision Detection • Wraps the Bullet physics library. • Provides standard rigid body simulation. • Provides game character and vehicle models. • Provides ray and hit testing.
  • 18. Particle System • Supports many particle attributes. • Supports animated particles. • Lacks support for particle collisions. • A simple editor is provided as a sample.
  • 19. Asset Management • gameplay-encoder – a command-line tool for packing game assets to a binary file package. – (.TTF) True-type fonts – (.FBX) Autodesk’s 3D scene format gameplay-encoder -s 14 Futura-Medium.ttf futura-med.gpb gameplay-encoder -oa –tb sphere Level1-Tutorial.fbx lev1-tut.gpb
  • 20. Asset Management • gameplay-encoder – a command-line tool for packing game assets to a binary file package. – (.TTF) True-type fonts – (.FBX) Autodesk’s 3D scene format • Other formats are supported directly. – Standard image formats – Standard audio formats
  • 21. Lua Scripting & Language Bindings • Lua scripting is done by specifying Lua handlers for predefined or custom events. scripts { initialize = res/script.lua#initialize Game config: update = res/script.lua#update render = res/script.lua#render finalize = res/script.lua#finalize } Lua script:
  • 22. Lua Scripting & Language Bindings • Lua scripting is done by specifying Lua handlers for predefined or custom events. • Additional interaction possible through the game’s script controller. • Additional language bindings available for the cross-compiled language Haxe. https://github.com/MIvanchev/hx-gameplay
  • 23. Documentation and development environments • GamePlay3D is well documented. • All C++ environments usable. • All Lua environments usable. • Command line tools for packaging and deployment.
  • 24. Questions Thank you for your time!