Nearly all of today's PC and console games use 3D graphics. With mobile phones getting more and more powerful and some devices even boasting a hardware 3D acceleration, development using three-dimensional graphics is an important topic for mobile computing. This module covers the JSR 184 (Mobile 3D Graphics) and explores the possibilities offered by its retained mode (high level) API for defining a scene graph and modifying objects in the world. A detailed example walks you through the basics of the free, open source 3D package Blender. Using this powerful software, you can create a sample 3D scene that you can display on your mobile phone with just a few lines of code. The challenge is about extending a sample 3D game framework, featuring an exciting car racing game!
Contents:
* Mobile 3D - Overview
* JSR 184 (m3g)
* Scene graph
* Your first m3g file with Blender
* Display, load and modify the 3D scene
* Objects and materials
* Challenge: 3D car racing game
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...Tomohiro Fukuda
This slide is presented in CAADRIA2011 (The 16th International Conference on Computer Aided Architectural Design Research in Asia).
Abstracts: Acquiring current 3D space data of cities, buildings, and rooms rapidly and in detail has become indispensable. When the point cloud data of an object or space scanned by a 3D laser scanner is converted into polygons, it is an accumulation of small polygons. When object or space is a closed flat plane, it is necessary to merge small polygons to reduce the volume of data, and to convert them into one polygon. When an object or space is a closed flat plane, each normal vector of small polygons theoretically has the same angle. However, in practise, these angles are not the same. Therefore, the purpose of this study is to clarify the variation of the angle of a small polygon group that should become one polygon based on actual data. As a result of experimentation, no small polygons are converted by the point cloud data scanned with the 3D laser scanner even if the group of small polygons is a closed flat plane lying in the same plane. When the standard deviation of the extracted number of polygons is assumed to be less than 100, the variation of the angle of the normal vector is roughly 7 degrees.
The game API is one of the most interesting and unique concepts of Java ME. It consists of very useful classes that help you with typical tasks that are required in almost ever game — for example sprite handling, tiled backgrounds or collision detection. This module will explain those concepts and how to create an own game loop. The challenge is the largest project yet and involves writing your own game called "Schlabo". The player moves his avatar at the bottom of the screen and has to shoot the enemy that moves randomly at the top.
Contents:
* Performance
* Game API
* Game loop
* GameCanvas
* Bitmaps
* Sprite
* Layer and TiledLayer
* LayerManager
Availability of Mobile Augmented Reality System for Urban Landscape SimulationTomohiro Fukuda
This slide is presented in CDVE2012 (The 9th International Conference on Cooperative Design, Visualization, and Engineering).
Abstract. This research presents the availability of a landscape simulation method for a mobile AR (Augmented Reality), comparing it with photo montage and VR (Virtual Reality) which are the main existing methods. After a pilot experiment with 28 subjects in Kobe city, a questionnaire about three landscape simulation methods was implemented. In the results of the questionnaire, the mobile AR method was well evaluated for reproducibility of a landscape, operability, and cost. An evaluation rated as better than equivalent was obtained in comparison with the existing methods. The suitability of mobile augmented reality for landscape simulation was found to be high.
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape AssessmentTomohiro Fukuda
This slide is presented in CMC2012 (2012 4th International Conference on
Communications, Mobility, and Computing).
Abstract. This research presents the development of a mobile AR system which realizes geometric consistency
using GIS, a gyroscope and a video camera which are mounted in a smartphone for urban landscape assessment. A low cost AR system with high flexibility is developed.
Geometric consistency between a video image and 3DCG are verified. In conclusion, the proposed system was evaluated as feasible and effective.
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...Tomohiro Fukuda
This slide is presented in CAADRIA2011 (The 16th International Conference on Computer Aided Architectural Design Research in Asia).
Abstracts: Acquiring current 3D space data of cities, buildings, and rooms rapidly and in detail has become indispensable. When the point cloud data of an object or space scanned by a 3D laser scanner is converted into polygons, it is an accumulation of small polygons. When object or space is a closed flat plane, it is necessary to merge small polygons to reduce the volume of data, and to convert them into one polygon. When an object or space is a closed flat plane, each normal vector of small polygons theoretically has the same angle. However, in practise, these angles are not the same. Therefore, the purpose of this study is to clarify the variation of the angle of a small polygon group that should become one polygon based on actual data. As a result of experimentation, no small polygons are converted by the point cloud data scanned with the 3D laser scanner even if the group of small polygons is a closed flat plane lying in the same plane. When the standard deviation of the extracted number of polygons is assumed to be less than 100, the variation of the angle of the normal vector is roughly 7 degrees.
The game API is one of the most interesting and unique concepts of Java ME. It consists of very useful classes that help you with typical tasks that are required in almost ever game — for example sprite handling, tiled backgrounds or collision detection. This module will explain those concepts and how to create an own game loop. The challenge is the largest project yet and involves writing your own game called "Schlabo". The player moves his avatar at the bottom of the screen and has to shoot the enemy that moves randomly at the top.
Contents:
* Performance
* Game API
* Game loop
* GameCanvas
* Bitmaps
* Sprite
* Layer and TiledLayer
* LayerManager
Availability of Mobile Augmented Reality System for Urban Landscape SimulationTomohiro Fukuda
This slide is presented in CDVE2012 (The 9th International Conference on Cooperative Design, Visualization, and Engineering).
Abstract. This research presents the availability of a landscape simulation method for a mobile AR (Augmented Reality), comparing it with photo montage and VR (Virtual Reality) which are the main existing methods. After a pilot experiment with 28 subjects in Kobe city, a questionnaire about three landscape simulation methods was implemented. In the results of the questionnaire, the mobile AR method was well evaluated for reproducibility of a landscape, operability, and cost. An evaluation rated as better than equivalent was obtained in comparison with the existing methods. The suitability of mobile augmented reality for landscape simulation was found to be high.
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape AssessmentTomohiro Fukuda
This slide is presented in CMC2012 (2012 4th International Conference on
Communications, Mobility, and Computing).
Abstract. This research presents the development of a mobile AR system which realizes geometric consistency
using GIS, a gyroscope and a video camera which are mounted in a smartphone for urban landscape assessment. A low cost AR system with high flexibility is developed.
Geometric consistency between a video image and 3DCG are verified. In conclusion, the proposed system was evaluated as feasible and effective.
Currently, Java ME is mainly used for games. Especially there it is very important to know how to handle the low level graphics facilities that are available in Java ME. This includes directly drawing to the screen as well as handling key input yourself. Most major applications also implement their own user interface themselves instead of using the high level UI provided by Java ME. The first challenge of this module is a simply key code analyzer so that you can familiarize yourself with the concepts of the Canvas and event processing. The second challenge is more sophisticated and requires you to write a small paint application.
Contents:
* Canvas
* Key Events
* Game Actions
* Geometry and Text
* Images
* PNG Optimization
Java ME - 06 - Record Stores, Distribution and LocalizationAndreas Jakl
Almost every application needs to store data — e.g. for saving user preferences, highscores or login data. This module explains the concepts behind the record stores, the only way to save data that is included in the MIDP specification and therefore supported on all phones. Data access can be handled conveniently using the DataInputStream and DataOutputStream-classes.This module also covers how to distribute your applications using different project configurations in NetBeans; a process which can involve pre-processing, selective resource inclusion as well as obfuscation. As mobile phones are available on a global market, localization is also a very important aspect. The challenge involves extending the game from the last course so that the game can save the highscore and can be deployed on phones with different screen sizes using specialized graphics.
Contents:
* Record Stores
o Input/OutputStreams
* Distribution
*
o Deployment
o Pre-Processing
o Obfuscation
o OTA-Deployment
* Localization
Java ME - 07 - Generic Connection Framework, HTTP and SocketsAndreas Jakl
The speciality of mobile phones is that they are *mobile* and offer access to the internet from anywhere. In this section, you will learn how to use the Generic Connection Framework in Java ME to connect to web servers or other clients using HTTP or sockets directly. The challenge involves creating a client for a multiplayer game similar to "Asteroids", the game server is provided in the downloadable materials.
Contents:
* Generic Connection Framework
* Asynchronous connections
* Hypertext Transfer Protocol
* HTTP Get / HTTP Post
* Sockets
Java ME - 04 - Timer, Tasks and ThreadsAndreas Jakl
Most mobile applications will have to use asynchronous processing — for running the game loop or for connecting your MIDlet to the Internet. This module is a repetition of the basic thread concepts that you will need for your mobile applications. It also contains details of how to use the Timer to generate regular call-backs. In the first challenge, you will write a small alarm clock based on the high level user interface. The second challenge is about drawing a ball that bounces around on the screen using the low level graphics API.
Contents:
* Timer
* Scheduling
* Threads
* Runnable vs. Thread
In the first module of the Java ME course, you will get a quick overview of the concepts behind Java ME. This includes information on the architecture of Java ME applications and how they differ from Java SE. In order to give you an impression on what is involved in developing for mobile phones using Java ME, the slides also contain basic information on distributing your applications. After this generic introduction, the concept of commands is introduced. In the challenge you will develop, debug and deploy your very first "Hello World" MIDlet.
Contents:
* Java Platform, Micro Edition
* Profiles, Configurations — MIDP, CLDC, CDC
* MIDlet Suites, Manifest, .jad and .jar
* Signing, Obfuscation, Over-the-Air distribution
* IDEs, Emulators
* JTWI, MSA, MIDP 3.0, JavaFX
* Commands
Java ME comes with an easy to use user interface framework. This module will show you how the available controls look like and how they can be put together to create your own applications. The challenge is about developing a small rock, paper and scissors game and lets you try the concepts of this and the commands introduced in the previous lesson in a small game.
Contents:
* Form, Alert, List, TextBox, Ticker
* Items:
o ChoiceGroup
o TextField
o Gauge
o DateField
o ImageItem
o Spacer
o CustomItem
* LWUIT, eSWT, JavaFX Mobile
YARCA (Yet Another Raycasting Application) Projectgraphitech
The scope of this project is to extend NASA’s World Wind to make it possible to visualize ray casting not only in intersection with the terrain, but also to consider 3D objects, which we call barriers, that will be hit by rays emitted by other objects which we call transmitters, calculating the coverage area and field of view of the transmitters and showing how the transmission signal is reflected onto the objects’ surfaces.
Slides I prepared as part of NTU School of Art, Design and Media's Interactive Environment class where I was the teaching assistant.
This set of slides is suitable for people with no background in 3D models or game development.
Learn how to make real 3D games for Nokia Series 40 Asha phones using modern implementations of Mobile Java APIs. Presenter Michael Samarin of Futurice will start by introducing the details of the 3D game-making process: planning and building game levels; lighting and degree of realism; modelling tools vs. manual character creation; animations and behaviour of game objects; and balancing memory management against texture detail. You will learn game interface strategies including touch, touch-and-type, and keyboard only. Michael will share tips to optimize the performance of your games across different screen sizes and models of Series 40 phones. He’ll conclude with an overview of Mobile Java 3D performance on the latest range of Nokia Series 40 Asha phones.
The quickstart slides contain a quick walkthrough for creating your first project using Carbide.c++ Edition and its new UI-designer (available as a free trial version). The final project will display an image, offer the possibility to enter text and display this text on the screen. A very short overview of relevant Symbian OS topics is given at the appropriate locations. To train your Symbian OS skills, you have to option to complete the challenge, which is a "Guess-a-number"-game. Basic knowledge about Symbian OS is recommended to complete this challenge.
Contents
* Symbian OS naming conventions
* Working with Carbide.c++ Developer Edition
* Creating an S60 project
* Application structure
* Topics: Image control, menu definition, text query dialog, label control
* Short overview about descriptors and leaves
State of mago3D, An Open Source Based Digital Twin PlatformSANGHEE SHIN
I gave this talk at the FOSS4G Thailand 2019 which was held at Chulalongkorn University, Bangkok on 4th Nov 2019. I talked about the recent achievements and improvements of mago3D project, an open source based Digital Twin platform. mago3D(http mago3d.com) is relatively new project first released in July 2017. The ultimate goal of mago3D is developing an open source based digital twin platform that can replicate and simulate the real world objects, processes, and phenomena on web environment. mago3D has been used in various industry sectors including ship building, urban management, indoor data management, and national defense. In this talk I showcased several real projects that used the mago3D and shared what I learnt from these projects. Also I introduced new features and future plan of mago3D.
State of the content pipeline for WebGL Development. Not perfect but it's going in the right direction with improved COLLADA integration and a new file format, glTF, in the works.
Current State of mago3D, an Open Source Based Digital Twin PlatformSANGHEE SHIN
I gave this talk at the FOSS4G 2019 Bucharest. I talked about the recent achievements and improvements of mago3D project, an open source based Digital Twin platform. mago3D(http mago3d.com) is relatively new project first released in July 2017. The ultimate goal of mago3D is developing an open source based digital twin platform that can replicate and simulate the real world objects, processes, and phenomena on web environment. mago3D is on its way to achieve this goal now. mago3D has been used in various industry sectors including ship building, urban management, indoor data management, and national defense. In this talk I showcased several real projects that employed the mago3D and shared what I learnt from these projects.
Currently, Java ME is mainly used for games. Especially there it is very important to know how to handle the low level graphics facilities that are available in Java ME. This includes directly drawing to the screen as well as handling key input yourself. Most major applications also implement their own user interface themselves instead of using the high level UI provided by Java ME. The first challenge of this module is a simply key code analyzer so that you can familiarize yourself with the concepts of the Canvas and event processing. The second challenge is more sophisticated and requires you to write a small paint application.
Contents:
* Canvas
* Key Events
* Game Actions
* Geometry and Text
* Images
* PNG Optimization
Java ME - 06 - Record Stores, Distribution and LocalizationAndreas Jakl
Almost every application needs to store data — e.g. for saving user preferences, highscores or login data. This module explains the concepts behind the record stores, the only way to save data that is included in the MIDP specification and therefore supported on all phones. Data access can be handled conveniently using the DataInputStream and DataOutputStream-classes.This module also covers how to distribute your applications using different project configurations in NetBeans; a process which can involve pre-processing, selective resource inclusion as well as obfuscation. As mobile phones are available on a global market, localization is also a very important aspect. The challenge involves extending the game from the last course so that the game can save the highscore and can be deployed on phones with different screen sizes using specialized graphics.
Contents:
* Record Stores
o Input/OutputStreams
* Distribution
*
o Deployment
o Pre-Processing
o Obfuscation
o OTA-Deployment
* Localization
Java ME - 07 - Generic Connection Framework, HTTP and SocketsAndreas Jakl
The speciality of mobile phones is that they are *mobile* and offer access to the internet from anywhere. In this section, you will learn how to use the Generic Connection Framework in Java ME to connect to web servers or other clients using HTTP or sockets directly. The challenge involves creating a client for a multiplayer game similar to "Asteroids", the game server is provided in the downloadable materials.
Contents:
* Generic Connection Framework
* Asynchronous connections
* Hypertext Transfer Protocol
* HTTP Get / HTTP Post
* Sockets
Java ME - 04 - Timer, Tasks and ThreadsAndreas Jakl
Most mobile applications will have to use asynchronous processing — for running the game loop or for connecting your MIDlet to the Internet. This module is a repetition of the basic thread concepts that you will need for your mobile applications. It also contains details of how to use the Timer to generate regular call-backs. In the first challenge, you will write a small alarm clock based on the high level user interface. The second challenge is about drawing a ball that bounces around on the screen using the low level graphics API.
Contents:
* Timer
* Scheduling
* Threads
* Runnable vs. Thread
In the first module of the Java ME course, you will get a quick overview of the concepts behind Java ME. This includes information on the architecture of Java ME applications and how they differ from Java SE. In order to give you an impression on what is involved in developing for mobile phones using Java ME, the slides also contain basic information on distributing your applications. After this generic introduction, the concept of commands is introduced. In the challenge you will develop, debug and deploy your very first "Hello World" MIDlet.
Contents:
* Java Platform, Micro Edition
* Profiles, Configurations — MIDP, CLDC, CDC
* MIDlet Suites, Manifest, .jad and .jar
* Signing, Obfuscation, Over-the-Air distribution
* IDEs, Emulators
* JTWI, MSA, MIDP 3.0, JavaFX
* Commands
Java ME comes with an easy to use user interface framework. This module will show you how the available controls look like and how they can be put together to create your own applications. The challenge is about developing a small rock, paper and scissors game and lets you try the concepts of this and the commands introduced in the previous lesson in a small game.
Contents:
* Form, Alert, List, TextBox, Ticker
* Items:
o ChoiceGroup
o TextField
o Gauge
o DateField
o ImageItem
o Spacer
o CustomItem
* LWUIT, eSWT, JavaFX Mobile
YARCA (Yet Another Raycasting Application) Projectgraphitech
The scope of this project is to extend NASA’s World Wind to make it possible to visualize ray casting not only in intersection with the terrain, but also to consider 3D objects, which we call barriers, that will be hit by rays emitted by other objects which we call transmitters, calculating the coverage area and field of view of the transmitters and showing how the transmission signal is reflected onto the objects’ surfaces.
Slides I prepared as part of NTU School of Art, Design and Media's Interactive Environment class where I was the teaching assistant.
This set of slides is suitable for people with no background in 3D models or game development.
Learn how to make real 3D games for Nokia Series 40 Asha phones using modern implementations of Mobile Java APIs. Presenter Michael Samarin of Futurice will start by introducing the details of the 3D game-making process: planning and building game levels; lighting and degree of realism; modelling tools vs. manual character creation; animations and behaviour of game objects; and balancing memory management against texture detail. You will learn game interface strategies including touch, touch-and-type, and keyboard only. Michael will share tips to optimize the performance of your games across different screen sizes and models of Series 40 phones. He’ll conclude with an overview of Mobile Java 3D performance on the latest range of Nokia Series 40 Asha phones.
The quickstart slides contain a quick walkthrough for creating your first project using Carbide.c++ Edition and its new UI-designer (available as a free trial version). The final project will display an image, offer the possibility to enter text and display this text on the screen. A very short overview of relevant Symbian OS topics is given at the appropriate locations. To train your Symbian OS skills, you have to option to complete the challenge, which is a "Guess-a-number"-game. Basic knowledge about Symbian OS is recommended to complete this challenge.
Contents
* Symbian OS naming conventions
* Working with Carbide.c++ Developer Edition
* Creating an S60 project
* Application structure
* Topics: Image control, menu definition, text query dialog, label control
* Short overview about descriptors and leaves
State of mago3D, An Open Source Based Digital Twin PlatformSANGHEE SHIN
I gave this talk at the FOSS4G Thailand 2019 which was held at Chulalongkorn University, Bangkok on 4th Nov 2019. I talked about the recent achievements and improvements of mago3D project, an open source based Digital Twin platform. mago3D(http mago3d.com) is relatively new project first released in July 2017. The ultimate goal of mago3D is developing an open source based digital twin platform that can replicate and simulate the real world objects, processes, and phenomena on web environment. mago3D has been used in various industry sectors including ship building, urban management, indoor data management, and national defense. In this talk I showcased several real projects that used the mago3D and shared what I learnt from these projects. Also I introduced new features and future plan of mago3D.
State of the content pipeline for WebGL Development. Not perfect but it's going in the right direction with improved COLLADA integration and a new file format, glTF, in the works.
Current State of mago3D, an Open Source Based Digital Twin PlatformSANGHEE SHIN
I gave this talk at the FOSS4G 2019 Bucharest. I talked about the recent achievements and improvements of mago3D project, an open source based Digital Twin platform. mago3D(http mago3d.com) is relatively new project first released in July 2017. The ultimate goal of mago3D is developing an open source based digital twin platform that can replicate and simulate the real world objects, processes, and phenomena on web environment. mago3D is on its way to achieve this goal now. mago3D has been used in various industry sectors including ship building, urban management, indoor data management, and national defense. In this talk I showcased several real projects that employed the mago3D and shared what I learnt from these projects.
mago3D: Let's integrate BIM and 3D GIS on top of FOSS4GSANGHEE SHIN
This presentation was given at FOSS4G Europe 2017 which was held at ENSG, France.
***
Let's integrate BIM and 3D GIS on top of FOSS4G!
Sanghee Shin, Sungdo Son, BJ Jang, JeongDae Cheon, Hakjoon Kim
Although there has been numerous attempts to integrate indoor and outdoor space on a single geospatial platform, the outcome of these attempts are not so satisfactory till to date. Difference of data model, massive number of data to be rendered, big volume of file size are among those major technical barriers that hindered seamless integration of indoor and outdoor space. This talk will introduce a brand-new FOSS4G project called Mago3D that could seamlessly integrate BIM(Building Information Model) and popular 3D GIS model in web browser using Cesium or Web World Wind. Mago3D project aims at developing a JavaScript plug-in for existing WebGL Globe to expand WebGL Globe's functionality and usability even to indoor space and architectural(BIM) areas. To do this, Mago3D.js has been designed and developed as a WebGL independent JavaScript. Mago3D.js is composed of 6 main components like follows:
Mago3D Connector that interacts with WebGL Globe such as Cesium
Mago3D Renderer that shades and renders 3D data
Mago3D Accelerator that carries out performance enhancing algorithms such frustum & occlusion culling, indexing, LOD(Level Of Detail) handing
Mago3D Data Container that contains and manages 3D data
Mago3D Process Manager that manages whole process from data receiving to rendering
Mago3D REST API that provides API for 3D data sending and receiving
By plug in Mago3D.js to Cesium, Web World Wind, users can expand those WebGL functionality and usability to indoor space. One of big hurdle to integrate indoor and outdoor space simultaneously is handling and visualisation of massive 3D data. To overcome this hurdle, new format called F4D has been devised adopting block reference concept. Also a format converter that converts popular 3D format to F4D has been developed. Currently industry standard IFC(Industry Foundation Classes), JT(Jupiter Tessellation), and popular 3D formats such as OBJ, 3DS, COLLADA DAE can be converted to F4D format. F4D format coupled with Mago3D.js has proven that it can increase memory management efficiency and rendering speed drastically. MAGO3D can now visualise massive 3D data including indoor objects, at least 100k objects, in a single scene seamlessly with traditional outdoor 3D GIS objects. Users can now manage and handle almost every geospatial object from bolt & nut level to whole globe level with MAGO3D. This project will evolve to manage and service more dynamic data such as IoT (Internet of Things), point clouds, climate & weather data, and transportation..
Create Engaging Healthcare Experiences with Augmented RealityAndreas Jakl
Would you like to try hands-on how to create your first Augmented Reality app? In this session, you will see how easy it is to use 3D technologies and automated speech processing (through Amazon Sumerian) to explain healthcare-related topics. The session is defined for health professionals with little or no prior experience in app design, who would love to share their knowledge with new didactic methods. Additionally, we will provide a behind-the-scenes look on the use case “Enlightening Patients with Augmented Reality” within the funded research project “Immersive Media Lab”.
Presented at the build.well.being conference on June 14th, 2019:
https://buildwellbeing.fhstp.ac.at/
More information about the contents:
https://www.andreasjakl.com/
AR / VR Interaction Development with UnityAndreas Jakl
Introduction to using C# for making Augmented Reality & Virtual Reality scenes interactive in Unity 2018 and beyond.
The lecture slides first cover the basics of C# and clarify the different C# / .NET settings in Unity. Next, an in-depth look at how GameObjects work behind the scenes from the C# perspective. To complete the necessary basics, Coroutines provide means to handle autonomous code for a better software architecture - but these shouldn't be confused with true asynchronous threads.
The next part is specially geared towards AR / VR: how to implement gaze from the main headset camera. Raycasting provides the necessary search capabilities for the hit target.
How to inform the hit object? The described approach utilizes C# Events. These are a complex topic; therefore, the materials take a deeper look at what's behind Events: Delegates, EventHandler, Actions and UnityEvents.
To wrap up, the examples are completed using a reticle / cursor for raycasts. To put this into context with AR / VR, the examples are based on a canvas to place a 2D sprite in a 3D world space canvas.
Content overview:
- Scripting: Frameworks, APIs and Languages
- GameObjects: Behind the Scenes
- Coroutines
- Gaze & Raycasting
- Delegates, Events & Actions
- Reticle / Cursor for Raycasts, based on a Canvas
Android Development with Kotlin, Part 3 - Code and App ManagementAndreas Jakl
- Code Management
- Open Source
- Version Control & Git
- App Stores
- Testing Mobile Apps
- Automated Tests
- Visual Studio App Center
- Espresso Test Recorder
- Firebase Test Lab
- Robo Tests
- App Distribution
In this presentation, you will learn how to add NFC tag reading to an Android app. It registers for auto-starting when the user taps a specific NDEF NFC tag with the phone. In addition, the app reads the NDEF records from the tag.
Further instructions: https://www.andreasjakl.com/nfc-tags-ndef-and-android-with-kotlin/
Open source sample app: https://github.com/andijakl/NfcDemo
- Target Audience (mobile vs. desktop)
- Web site technologies
- Structure & content: HTML / HTML5
- Styling: CSS
- Interactivity & scripting languages: JavaScript
- Behind the Scenes
- Client vs Server
- HTTP and web requests
- IP address & server location
- Accessibility
- Content Management Systems: Wordpress
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & MoreAndreas Jakl
iBeacons (Apple) and Eddystone (Google) have conquered the Bluetooth Beacon market. Both specifications allow to trigger specific actions on a smartphone at a well defined area. How do these formats work, what can you do with Bluetooth Beacons, what's changed for Beacons with Bluetooth 5 and what new possibilities does the Windows 10 Creators Update offer for Bluetooth developers?
More information:
Blog: https://www.andreasjakl.com/
Open Source Bluetooth Beacon Library & Example App: https://github.com/andijakl/universal-beacon/
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?Andreas Jakl
Beacons are one of the hottest topics of mobile development right now. Bluetooth Smart / LE is indispensable for Wearables and the Internet of Things (IoT). NFC is now finally arriving in the mass market.
With Windows 10, Microsoft has significantly expanded the possibilities for proximity technologies. In this overview, you will learn about the new scenarios and see several concrete examples of what is possible and how you can leverage it for your own projects!
Agenda:
NFC
- NFC simulation
- Smart Cards
- Raw NFC tag access
- Host card emulation (HCE)
Bluetooth Smart
- Bluetooth Beacon support
- Beacon specifications (iBeacon, Eddystone & co)
How to use cloud-based app testing to ensure that your mobile app doesn't suffer from bad reviews!
After an overview of the current state of mobile devices (operating system and device fragmentation for Android, iOS and Windows Phone), we take a look at current scientific studies that analyze app store reviews on a large scale, in order to extract useful app quality data.
In order to improve your app's quality, you will have to test a lot. Manual testing is usually limited to a few devices. Therefore, the best solution is often using cloud-based services like the Xamarin Test Cloud, which can test your app with a single click on 1000+ real devices.
You will also learn the basics of setting up your app for cloud-based testing and what kind of data you can extract.
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Andreas Jakl
How to create a cross-platform native app? What is Qt and which platforms does it support?
Get the latest information on the open source, C++ based framework that lets you target Android, iOS and Windows Phone - plus desktop and embedded platforms! Also contains info on contained UI technologies, the Qt dual-licensing model and the roadmap.
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows PhoneAndreas Jakl
How to create cross-platform mobile apps with HTML5 that integrate directly into the platform.
By combining several enterprise-class frameworks and tools, you can create apps that run on all mobile devices, developed in a central repository and tool.
In this presentation, you will learn how to create HTML5 apps with the Visual Studio Multi-Device Hybrid Apps plug-in. Apache Cordova is directly integrated and resposible for creating native apps for the mobile platforms.
WinJS can be used as a major UI framework that is now open source and works accross all platforms and browsers.
To check how you can integrate apps deeper with the native platforms, you will also see how to install and use a custom plug-in that enables Near Field Communication (NFC) on both Android and Windows Phone.
Nokia New Asha Platform Developer TrainingAndreas Jakl
In-depth look at the new opportunities and APIs of the Nokia Asha SDK, which enables you to develop apps for the latest phones like the Nokia Asha 501.
The training materials includes a quick overview of the refreshed UX, UI development and iconography, internationalization, phone / network / SIM state detection, file selections, notifications, radio tuner, maps, gestures and porting between different touch and non-touch devices.
The developer training was held by Mopius in Budapest on May 14th and was the world's first on-site training for the new Asha platform, just a few days after the platform's release.
The quick walkthrough will show you how to create your first NFC app for Windows Phone 8.
The NearSpeak app (available soon in the WP Store) writes voice NFC tags - touch the tags again to hear your message! Leave notes for your partner, reminders for yourself, or use them for a fun public social experiment.
This hands-on tutorial will show you how to create this app. You will see how to write a LaunchApp tag using the NDEF Library for Proximity APIs, how to recognize text spoken by the user, and how to use the speech synthesizer to let the phone read the text again.
Note that the instructions require basic knowledge of Windows Phone development.
The three most important NFC (Near Field Communication) scenarios for Windows 8 / Windows Phone 8 (WP8) app developers:
- Discover Your App
- Share to Others
- Seamless Multi-User Games & Collaboration
This presentation describes these three scenarios, and shows you how to implement them in C# from a technical perspective. It contains examples for both Windows 8 and Windows Phone 8 development, based on the new Windows Proximity APIs.
In addition, this presentation contains a quick overview of NFC as a technology, as well as pointers towards tools and documentation, including the open source NDEF library for more powerful and sophisticated NFC tag writing and reading tasks.
Introduction to the Windows 8 Platform Proximity APIs for NFC apps.
Create your own Near Field Communication apps to interact with peers as well as NFC tags. Also introduces the open source NDEF Library for Proximity APIs: http://ndef.codeplex.com/
- Subscribe to proximity messages
- Publish messages to peers and tags (WindowsUri and NDEF records)
- Parse & create NDEF messages (including Smart Posters)
- Launching apps on own and peer devices
- Registering for custom URI schemes and protocols
- LaunchApp tags to directly start the app
- Peer to peer: quick data exchange and long term connections with Wi-Fi Direct / Bluetooth
- Establishing peer to peer socket communications simply by tapping two devices
- User Experience Recommendations for peer to peer apps
NFC Development with Qt - v2.2.0 (5. November 2012)Andreas Jakl
Learn developing Near Field Communication (NFC) apps for Nokia's Symbian and MeeGo phones with step-by-step tutorials!
The three development options Qt, Symbian native and Java ME are outlined. A more detailed explanation shows the Qt Mobility 1.2 APIs to create modern NFC applications for smartphones.
In the final part, step-by-step hands-on tutorials walk you through developing your first two NFC apps. The first demo extends an example from the Qt SDK with reading & writing both URI and text NDEF records to create new sticky notes on the virtual corkboards visible on the screen. The second demo uses the LLCP protocol to create a peer-to-peer chat application between two NFC Forum compatible devices.
Most applications will need to communicate with other services or devices at some point, or at least save settings on the host computer. These concepts are covered in this module.
After introducing the generic concept behind devices, short examples show how to use files.
Afterwards, the module covers networking and its representation in Qt. In addition to providing classes for handling low level sockets, network managers simplify handling web service requests and responses like for the HTTP protocol. At the end, a short section explains the basics of different methods of parsing XML in Qt, including DOM trees, SAX, pull parsing and XQuery/XPath.
A section about internationalization demonstrates the process step-by-step, showing all required components to make your application multi-lingual.
05 - Qt External Interaction and GraphicsAndreas Jakl
This module explores the remaining aspects of writing own widgets and explains how to handle low-level events, which can originate from for example the mouse or the keyboard. Low level painting, however, can not only be used to draw custom widget - a short overview gives you an idea of the power behind the QPainter class. If your application has to manage multiple graphics items or if you want to build a dynamic UI, the section about the graphics view framework will contain an overview of the classes required to build scene-graph-like user interfaces. At the end of this module, a few slides explain optimizing images, which is important to keep the file sizes and loading times down on mobile devices.
This module explains several additional important concepts. These include properties of QObjects, data types, QString and various list types.
Special classes in Qt provide even more convenient APIs if you want to save settings in the right way for the target platform.
At the end, a guide walks you through what you need to know about embedding files and resources into your application.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Monitoring Java Application Security with JDK Tools and JFR Events
Java ME - 08 - Mobile 3D Graphics
1. Java™ Platform, Micro Edition Part 8 – Mobile 3D Graphics v3.0a – 18 April 2009 1 Andreas Jakl, 2009
2. Disclaimer These slides are provided free of charge at http://www.symbianresources.com and are used during Java ME courses at the University of Applied Sciences in Hagenberg, Austria at the Mobile Computing department ( http://www.fh-ooe.at/mc ) Respecting the copyright laws, you are allowed to use them: for your own, personal, non-commercial use in the academic environment In all other cases (e.g. for commercial training), please contact andreas.jakl@fh-hagenberg.at The correctness of the contents of these materials cannot be guaranteed. Andreas Jakl is not liable for incorrect information or damage that may arise from using the materials. This document contains copyright materials which are proprietary to Sun or various mobile device manufacturers, including Nokia, SonyEricsson and Motorola. Sun, Sun Microsystems, the Sun Logo and the Java™ Platform, Micro Edition are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. Andreas Jakl, 2009 2
3. Agenda Mobile 3D – Overview JSR 184 Scene graph Your first m3g file with Blender Display, load and modify the 3D scene Objects and materials Andreas Jakl, 2009 3
5. 3D Java Game Examples 5 Brothers in Arms: Earned in Blood (Gameloft) Planet Riders 3D (Fishlabs) Massive Snowboarding 3D (Gameloft) Tornado Mania! 3D (Digital Chocolate) For comparison: Current C++ / Open GL ES based N-Gage games (Symbian OS)(This is what is currently possible with mid-/higher class mobile phones) Blades & Magic 3D (Fishlabs) Hooked On: Creatures of the Deep (Infinite Dreams) Star Wars: The Force Unleashed (Universomo / LucasArts) One (Digital Legends) Andreas Jakl, 2009
6. Benchmark Your Phone FuturemarkSPMarkJava JSR 184http://www.futuremark.com/products/spmark/spmarkjavajsr184/ JBenchmark 3D/HD:http://www.jbenchmark.com/ Andreas Jakl, 2009 6
7. 3D APIs for Java ME Mobile 3D Graphics API (JSR 184) Java based 3D graphics library Supports immediate and retained mode (low and high level) Optional package Open GL ES (JSR 239) Provide Java bindings to the Open GL ES native 3D graphics library OpenGL ES can also be used in native code (Symbian OS / C++) Mascot Capsule Like JSR 184, additionally supported by e.g. SonyEricsson (Java 3D from Java SE is too bloated for mobile phones: ~40 MB) 7 Andreas Jakl, 2009
8. 3D APIs M3G builds on the feature set of OpenGL ES Both APIs are designed concurrently Andreas Jakl, 2009 8 Native C / C++ Applications Java Applications M3G (JSR 184) OpenGL ES Graphics Hardware
9. Performance Java is slow on mobile phones KVM most widely used today Nokia (and others) migrating to HotSpot VM from Sun But HotSpot takes a lot of RAM problematic in real life 9 Andreas Jakl, 2009 Benchmarked on an ARM926EJ-S processor with hand-optimized Java and assembly code Diagram from TomiAarnio (see sources slide at the end)
10. The Basics of JSR 184 Get started Andreas Jakl, 2009 10
11. JSR 184 Hardware independent Uses newer hardware + 3D accelerators if present Separate code from content m3g file format contains models, animation, appearance, textures, ... Control logic in source code Tightly integrated with LCDUI (from MIDP, requires floating point support of CLDC 1.1+) Built in high level & low level API Scene graphs, keyframe animation, bones, ... 11 Andreas Jakl, 2009
12. Modes Immediate Mode Create objects programmatically Uses triangles as primitives Low level Retained mode Create objects in 3D app Scene graphs Keeps graphics processing code in native code (no Java)! Mixing is possible (e.g. insert immediate object into a scene graph) 12 Andreas Jakl, 2009
13. Tools Blender (Freeware, http://www.blender.org/) m3g exporter plug-in: http://www.nelson-games.de/bl2m3g/default.html Blender: Powerful, but difficult to learn UI Written in Python Commercial 3DS Max (integrated) Maya Lightwave 13 Andreas Jakl, 2009
14. JSR 184 – Synchronous Structure All APIs are synchronous Calls return when completed Create own thread for loading larger scenes! Structure No callbacks (interfaces, events, abstract methods) Do not override any methods 14 Andreas Jakl, 2009
15. m3g File Format Compact binary format Stores complete scene graph in file Objects are serialized Includes camera(s), lightning and objects Can be compressed Viewer:http://www.mascotcapsule.com/toolkit/m3g/en/index.php 15 Andreas Jakl, 2009
16. Scene Graph Andreas Jakl, 2009 16 World is a top-level node containing the whole scene Background defines the background against which the 3D scene is rendered World Background Groups allow the application to treat multiple nodes as a single unit Group Camera Light Groups can be nested inside other groups Sprite3D is a 2D image with a 3D position Light defines a light source in the scene Camera defines a viewpoint Sprite3D Group Group Mesh User object Mesh defines the 3D geometry of a visible object An arbitrary user object can be associated with any scene object MorphingMesh SkinnedMesh Morphing and skinned meshes are animated geometry objects Based on the scene graph image from the JSR 184 API documentation
17. Graph vs. Tree Scene graph has a tree structure Node can belong to at most one group at a time But components (VertexArrays, textures, ...) can be shared No cyclic structures allowed Andreas Jakl, 2009 17 Node Node Component Group Group Component Node
18. Scene Graph – Example Andreas Jakl, 2009 18 World root node Camera and light The car The landscape scene group Tree The tree consists of two meshes The tree has no texture image Grass block Grass texture
19. Node Abstract base class for all scene graph nodes Contains information about: Transformation Parent Alignment (also automatic!) Visibility ... Andreas Jakl, 2009 19 Node Camera Light Group Mesh Sprite3D World
20. Key Classes 3D graphics context Handles all rendering Graphics3D Utility to load m3g and png files (entire scene graphs or single objects) Loader Root node of the scene graph World 20 Andreas Jakl, 2009
21. Graphics3D Stores global state Rendering target, viewport, depth buffer, back buffer Camera, light sources Rendering quality hints (Antialiasing, dithering, true color rendering) Each node has its own local state Geometry & appearance (material, textures, ...) Transformation relative to the parent or world 21 Andreas Jakl, 2009 Graphics3D
22. Graphics3D – Rendering Modes Retained mode Render entire world (scenegraph) Uses lights and camera nodes from the world Immediate mode Render scene graph nodes or submesh Uses lights and camera from Graphics3D object Andreas Jakl, 2009 22
23. Graphics3D – Render Targets Graphics3D can render to any Graphics object or Image2D possible to render to textures (eg. environment mapping) Andreas Jakl, 2009 23 World M3G(JSR 184) Graphics3D Image2D Graphics Canvas Image MIDP CustomItem
24. Graphics3D – Example Target has to be bound and released Do not modify the target from the outside in between Andreas Jakl, 2009 24 publicclassMyCanvasextendsCanvas { Graphics3D myG3D = Graphics3D.getInstance(); publicvoidpaint(Graphics g) { try { myG3D.bindTarget(g); // ... update thescene ... // ... render thescene ... } finally { myG3D.releaseTarget(); } }
25. World Node Top level node for a scene graph Contains Other nodes that compose the scene Background Camera, Light, Fog Requires an active camera for rendering Andreas Jakl, 2009 25 World
26. Example – Goal Create an m3g file with Blender Load and display the file in a MIDlet Rotate the object Andreas Jakl, 2009 26
28. Blender – Interface Andreas Jakl, 2009 28 3D Viewport Light Sample Cube Camera Buttons Window
29. Blender – Windows Andreas Jakl, 2009 29 The highlighted window receiveskeyboard inputs: Highlighted (slightly brightercolour) Change the window type: ... you can split, join and resize windows anddrag mini windows (with the )
30. Blender – 3D Viewport Andreas Jakl, 2009 30 Click + hold middle mouse button Rotate viewport Shift + middle mouse button Pan view (move sideways) Mouse wheel Zoom Z-key Toggle wireframe or solid mode NUM5 (with NUM LOCK on) Toggle Ortographic / Perspective NUM0 (with NUM LOCK on) Camera view (MMB will exit it) Choose viewport shading (more options than Z) NUM refers to the number pad – if you pressed the numbers above the normal keys instead, press 1 to return to the normal view (for viewing layer 1)
31. The 3D Cursor Andreas Jakl, 2009 31 Task: place the 3D cursor between the camera and the cube Make sure you are in object mode (press TAB to toggle) Disable the “3d transform manipulator” to make sure you can move the cursor without selecting the cube by accident Hit NUM7 to get to the top view Click with LMB between cube and camera Choose different view (NUM1 – front view or NUM3 – side view) Click between cube and camera with LMB Rotate the view to see if it was positioned correctly 1 2 3 4 Note: we’re working in a 3D space but only have a 2D screen – therefore you need two views to set all three coordinates of the cursor! 5
32. Deleting and Adding Objects Andreas Jakl, 2009 32 Task: replace the cube with a monkey Set “Object Mode”; switch off “3d transform manipulator” (see previous slide) Move the cursor to the center (Shift+CKEY) RMB on the cube to select it DELKEY to delete the object. Confirm in the prompt window (“Erase Selected”) Use the Add menu to add a new object. Here: Add Mesh Monkey Blender automatically switches to edit mode. Go to object mode (TAB), press CKEY to center the cursor on the screen, ZKEY to toggle solid and wireframe mode. Zoom in (Mouse wheel) 3 4 5 6
33. Material Andreas Jakl, 2009 33 2 3 Task: change the material of the monkey Select the monkey object (RMB); set “Object Mode” Press the shading button In contrast to the cube, the monkey doesn’t have a default material. Click the button next to “Add New” and choose “O Material” (same that was originally on the cube) In the “Material” tab, set any color you want for “Col” and “Spe” (specularcolor, for highlights) Press the button with the small car in the “Links and Pipeline” tab for an automatic material name Set the draw type of the 3D Viewport to “Shaded” for a more accurate preview 4 5 6
34. IDs and m3g Export Andreas Jakl, 2009 34 Task: to access the nodes from the m3g file in source code, they need IDs. Set “Object Mode” Select the monkey with the RMB Add #01 at the end of the object name to give it the ID 1 in the m3g file Do the same for the light (#02) and the camera (#03) Task: export the m3g file (requires the m3g exporter plug-in) File Export M3G You can safely disable texturing
35. m3g File Andreas Jakl, 2009 35 Open the m3g file in the m3g viewer* and choose Display Scene Graph View Our IDs have been saved in the file * http://www.mascotcapsule.com/toolkit/m3g/en/index.php
36. Display the 3D scene Switching to the Java side Andreas Jakl, 2009 36
37. Loading the m3g File Create a simple MIDlet and Canvas-class (sample start project is provided) Add the monkey.m3g to the root of the .jar Init code snippetof the Canvas: Object3D[] roots = null; try { // Load the m3g file // The loader will return all root level objects of the file, // which are not referenced by any other objects. // Always state an absolute path ("/")! roots = Loader.load("/monkey.m3g"); } catch (IOException ex) { // couldn't open the file, or invalid data in the file ex.printStackTrace(); } // Usually the world node is the only and first node. // If loading unknown files, you should check it though. // Save the world node to an instance variable for (inti = 0; i < roots.length; ++i) { if (roots[i] instanceof World) { iWorld = (World) roots[i]; } } Andreas Jakl, 2009 37
38. Game loop in a GameCanvas Andreas Jakl, 2009 38 public void run() { // Get the singleton Graphics3D instance that is associated with this midlet. Graphics3D g3d = Graphics3D.getInstance(); // Measure the time that has passed since the prev. frame long start, elapsed = 0; int time = 0; while (iIsActive) { start = System.currentTimeMillis(); try { // Bind the 3D graphics context to the given MIDP Graphics object. g3d.bindTarget(getGraphics()); // Update the world [...] iWorld.animate(time); // Animate the world // Render the view from the active camera g3d.render(iWorld); } finally { // Release the graphics context g3d.releaseTarget(); } flushGraphics(); // Flush the rendered image to the screen // Give other threads a chance to run Thread.sleep(20); // This sample omits try and catch elapsed = System.currentTimeMillis() - start; time += elapsed; // Time that has passed since the last frame } }
39. MIDP Relationship Andreas Jakl, 2009 39 Mobile 3D MIDP 2 binds Graphics3D Graphics renders to renders renders World Screen
40. The Camera The camera was too far away in the Blender scene Move it towards the object after loading the world: Andreas Jakl, 2009 40 Camera cam = iWorld.getActiveCamera(); cam.setTranslation(-5.0f, 5.0f, -4.0f);
41. Node Transformations Each node: local coordinate system Node transformation: from this node to the parent node (ignored for root) Translation T Rotation R Non-uniform scale S Generic matrix M Composite C = TRSM Andreas Jakl, 2009 41 C World C Group C C Sprite3D Group C C Group Mesh
42. Modifying Objects Rotate the monkey Andreas Jakl, 2009 42 private static final int ID_MONKEY = 1; // Find searches through all children of this node Node monkey = (Node) iWorld.find(ID_MONKEY); switch (getKeyStates()) { case LEFT_PRESSED: // Parameters: angle, x / y / z component of // the rotation axis. Here: all on z axis monkey.postRotate(5.0f, 0.0f, 0.0f, -1.0f); break; case RIGHT_PRESSED: monkey.postRotate(5.0f, 0.0f, 0.0f, 1.0f); break; }
44. Textures Add visual richness Backgrounds Surface structure Sprites for “cheating”(no complex 3D models) Andreas Jakl, 2009 44 Character images copyright David Dang http://www.chi-3d.co.uk/ Sprites in “Doom” by id Software
45. Perspective Correction Perspective correction Expensive, avoid if possible But still better than a lot more polygons Nokia: 2% fixed overhead, 20% in the worst case Andreas Jakl, 2009 45 Perspective correction http://en.wikipedia.org/wiki/Texture_mapping
46. Light Maps Lightning Use light maps instead of real light Pre-calculate light for non-textured (colored) objects: vertex coloring Andreas Jakl, 2009 46 light map(unfiltered) light map(filtered) w/o light maps with light maps Images from lecture slides of Stephen Chenney (see sources at the end)
47. Mobile Textures II Backgrounds Use background images, no skybox or real 3D Sprites Much faster than real geometry or textured quads But too much overhead for particle effects Images Load through Loader class (Image2D) – going through MIDP Image wastes memory Andreas Jakl, 2009 47 Sprites in a 3D scene Playman World Soccer (Mr.Goodliving) 3D Sprites can be useful for 2D games as well (rotation!) Tower Bloxx (Digital Chocolate)
48. IndexBuffer IndexBuffer Appearance Appearance Mesh How is the object defined? (vertices, material, ...) Andreas Jakl, 2009 48 Mesh Vertex positions, normals, texture coordinates, ... VertexBuffer Defines a submesh (consisting of triangle strips) – reference data from the vertex buffer IndexBuffer Appearance 1 Appearance per submesh. Defines color, texture, ...
49. Sprite3D 2D image with 3D position Fast, but functionally restricted alternative to textured geometry Scaled mode: billboards, trees, ... Unscaled mode: text labels, icons, ... Andreas Jakl, 2009 49 Sprite3D Appearance Contains compositing and fogging attributes Image2D
51. Animations Defined in the m3g file Automatically played corresponding to the time by animate() method Andreas Jakl, 2009 51 Defines time within the animation, speed, weight for blending, ... Animated Object (Object3D) AnimationTrack AnimationController AnimationTrack KeyframeSequence Each track associates a property (e.g. position) with a controler & keyframe data. Multiple tracks may be blended. Values of the animated property (keyframes) + the interpolation mode. KeyframeSequence
52. KeyframeSequence Andreas Jakl, 2009 52 KeyframeSequence Keyframe: time & property value at that time Sequence: Can store multiple keyframes Several interpolation methods Can be looping property value sequence time v t Diagram based on Sean Ellis, Superscape
53. KeyframeSequence Keyframe: time & property value at that time Sequence: Can store multiple keyframes Several interpolation methods Can be looping Andreas Jakl, 2009 53 KeyframeSequence property value sequence time Diagram based on Sean Ellis, Superscape
54. KeyframeSequence Keyframe: time & property value at that time Sequence: Can store multiple keyframes Several interpolation methods Can be looping Andreas Jakl, 2009 54 KeyframeSequence property value sequence time Diagram based on Sean Ellis, Superscape
55. KeyframeSequence Andreas Jakl, 2009 55 KeyframeSequence Keyframe: time & property value at that time Sequence: Can store multiple keyframes Several interpolation methods Can be looping property value sequence time v t Diagram based on Sean Ellis, Superscape
56. AnimationController Controls position, speed and weight of an animation sequence Usually controls multiple AnimationTracks (properties) at the same time Defines mapping from world time to sequence time Andreas Jakl, 2009 56 AnimationController world time sequence time 0 s d t1 t2 Diagram based on Sean Ellis, Superscape
57. Morphing Andreas Jakl, 2009 57 Base Target 1eyes closed Target 2 mouth closed Animate eyesand mouth independently Unfortunately, the animations are not exported to the pdf Mesh MorphingMesh Images from Aarnio and Pulli (see sources at the end)
58. Skinning Andreas Jakl, 2009 58 No skinning Local skinning one bone per vertex Smooth skinning two bones per vertex Unfortunately, the animations are not exported to the pdf Mesh SkinnedMesh Images from Aarnio and Pulli (see sources at the end)
59. Summary M3G enables real-time 3D on mobile phones Works both with software and hardware 3D Supported by millions of devices Mixture of low- and high level Allows easy creation of scenes But still gives the developer full control Flexible architecture Based on OpenGL ES features Defines a convenient file format Andreas Jakl, 2009 59
60. Sources TomiAarnio and Kari Pulli: Advanced Game Development with the Mobile 3D Graphics API. JavaOne Conference, 2004. Andrew Davison: Special Topics in Info. Eng.: Introductionto J2ME Programming. Lectureslides, 2007 Qusay H. Mahmoud: Getting Started With the Mobile 3D Graphics API for J2ME. http://developers.sun.com/mobility/apis/articles/3dgraphics/ Carol Hamer: Creating a basic M3G file with Blender. http://bittyjava.wordpress.com/2007/01/04/creating-a-basic-m3g-file-with-blender/ David Millet, Arthur Tombs et al.: Blender 3D: Noob to Pro. http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro MikaelBaros: 3D programming tutorial for mobile devices using M3G (JSR 184). http://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/mobilejava3d/p_java3d_tutorial_part1_compliments_redikod.jsp Kari Pulli et al.: Developing Mobile 3D Applications With OpenGL ES and M3G. Eurographics 2006. http://people.csail.mit.edu/kapu/mobile_3D_course/index.html JanneHellsten: Building scalable 3D apps - Tips & tricks for developers. http://www.khronos.org/developers/library/seoul_04_2005/Hybrid_Tips-and-Tricks.ppt Stephen Chenney: Computer Game Technology. Lecture slides, 2001. http://www.cs.wisc.edu/graphics/Courses/638-f2001/ Andreas Jakl, 2009 60