QAugmentedReality - Local based augmented reality component
This article describes QAugmentedReality, an augmented reality (AR) engine that makes it easy for you to create AR applications like Nokia City Lens in QML.
Note: This is an entry in the PureView Imaging Competition 2012Q2
QAugmentedReality is an Augmented Reality engine that provides all functionalities to create your own local based augmented reality application like Nokia City Lens or social applications for example displaying your friends location or your parked car location direction.
Developers just need to setup for each item the longitude, latitude, description text, image and the engine will do the hard work to manage rendering, gps, compass. The component's strength is the model support that allows you to easy manage your data to display. To add a pin into your scene you just need to add a QAugmentedRealityCameraItem element to QAugmentedRealityCameraModel. A video of the component in operation is given below: <mediaplayer>http://www.youtube.com/watch?v=WFez-3_xp64</mediaplayer>
Get Started with QAugmentedReality
- Download the project from here
- Include QAugmentedReality directory into your project
Q_DECL_EXPORT int main(int argc, char *argv)
QScopedPointer<QApplication> app(createApplication(argc, argv));
qmlRegisterType<QAugmentedRealityCamera>("QAugmentedRealityCamera", 1, 0, "QAugmentedRealityCamera");
qmlRegisterType<QAugmentedRealityCameraModel>("QAugmentedRealityCamera", 1, 0, "QAugmentedRealityCameraModel");
qmlRegisterType<QAugmentedRealityCameraItem>("QAugmentedRealityCamera", 1, 0, "QAugmentedRealityCameraItem");
qmlRegisterType<QAugmentedRealityCameraDelegate>("QAugmentedRealityCamera", 1, 0, "QAugmentedRealityCameraDelegate");
// Resize the root QML element to view size
// Performance optimization flags
import QtQuick 1.1
import QAugmentedRealityCamera 1.0
"message": "Peschiera Borromeo",
"message": "Buenos Aires",
"infoBox" : "white"
QAugmentedRealityCamera is the component that provide not only the camera display feature, but includes GPS, Accelerometer, and Compass to display Pins on screen and being able to move them depending on watching direction.
To add a pin you need setup a QAugmentedRealityCameraModel for the component.
QAugmentedRealityCameraModel has a pins property that have to be filled with QAugmentedRealityCameraItem element.
You can add QAugmentedRealityCameraItem statically or dynamically.
Adding a pin statically
Adding a pin dynamically
This approach is preferred when fetching data from a database.
"message": "Peschiera Borromeo",
QAugmentedRealityCameraItem has the following properties:
- latitude - latitude of the item
- longitude - longitude of the item
- message - description text displayed inside the pin
- infoBox - the color of the box drawn on the left of the pin. This is because to give you the possibility to have pins of different color for your own purpose
- source - As for infoBox this feature allow you to set an image for your pin. Transparent images are allowed. The infoBox background color will be displayed on transparent areas.
Shooting still images
The component inherits from a base camera component so is possible to capture photos as with the default camera component. The result image will include the augmented reality items in the scene.
This feature will be improved as soon as possible to be fitable with all resolutions.
Be careful of large distances - the world is not flat
For pins located a very long way away you may see odd effects. Consider the example showcased on the video above - at certain watching angles Berlin, Tokyo and Melbourne appear close together.
This happens because the earth has a spherical shape and points in a sphere are located using polar coordinate system.
In our example what happens is that the bearing between Milan, Berlin, Tokyo and Melbourne is quite small - these are therefore shown as close together at some watching angle. This should not be a problem if you're working with objects that are within tens of kilometres or less.
Improvements that will come as soon as possible:
- filter item based on max distance, for example to display just items far less then 150mt
- At time of writing the delegate is static. if possible to allow users to create their own delegate
- Provided a customizable delegate the next step is to provide a customizable model
- qmldir usage
Despite improvements that will come the component is easy and powerful enough to start creating your local based augmented reality applications and enjoy with them.
If you have any questions about using the component or suggestions for improvement please add them in the comment section below.