IntroductionOctoMY™ is dependent on Qt5, and this section is here to give you a smooth start in case you are not already familiar with this wonderful platform. InstallingI made this video earlier on how to isntall Qt: Stability
| Media playback & encoding
Qt wraps g-streamer and other media libraries to support play back of media such as video and sound. It allows the developer to chose on which level they want to interact with media. On the high level you can just put a widget and run .play() on the low level you get access o buffers of video and audio for your processing pleasure. Depending on the active back-end Qt also gives you access to encode streams to network/disk etc. Performance graphics for 2DIn traditional Qt there exists different abstractions for graphics. For some smaller embedded platforms it can rely on a simple 2D subsystem only. But for most desktop platforms (Windows/MacOSX/Linux) and mobile platforms (Android/OSX) the 2D abstraction rests neatly on top of a high-performance 3D stack based on OpenGL or OpenGL ES respectively. This is a true gem, and makes graphics programming a joy thanks to the well thought out architecture that allows you to chose how high- or low- level you want to approach your graphics programming. There are lots of classes that allow you to go about your drawing as usual with well known concepts like color, line thickness, and shape while knowing that it will all be 3D accelerated under the hood. Then there is the whole new thing "QtQuick" or "QML". A declarative language that together with java script provides the quickest and meanest way to chug out interactive UI. Performance graphics for 3DQt has traditionally had a very strong bond to OpenGL, and this bond has server Qt very well as OpenGL is portable and performant over a wide range of platforms. However with the realization that OpenGL is showing it's age, the ever present question of comparability with DirectX on the Microsoft platforms and the advent of new technologies like Vulkan lurking in the near future, Digia has made the wise strategic move of starting to pre-preemptively generalizing the hardware abstraction layer towards graphics hardware. So for now Qt is bound to OpenGL, but soon it will support many other graphics abstractions, to our great benefit. While we wait, there is also nothing in Qt to hinder you from using DX together with Qt on the Microsoft platforms. Qt goes to great lengths to not interfere with other libraries on any platform, so it will work with a lot of other toolkits and engines, and you can even embed other graphics or game engines based on OpenGL inside Qt by exposing Qt's OpenGL context directly. Also keeping the same code-base for an application that is ported to the two noteworthy mobile platforms with Qt will be much simpler without DX. Beyond all the convenience classes for managing OpenGL spesific features such as VBO, FBO, loading textures and shaders etc. there is also a great effort being made to provide a full-blown 3D engine in Qt. It is called Qt3D 2.0 and is a complete rewrite of the old Qt3D that was part of Qt4.x and that was part of only one release before it was removed due to political reasons (Nokia ditched Qt). It has an impressive set of features and a lot of good thinking has gone into it's API to ensure that it can leverage the full potential of modern graphics hardware while staying flexible and performant. Another good news is that is in technology preview. This means that you can try it out today and it will be part of main-line Qt soon. You can read more about it here. MathAs part of the 3D stack, Qt has a full set of performance math routines such as matrix, vector, quaternions, point, rect etc. The common stl math functions such as sqrt, floor, sin etc. are also wrapped in a platform-independence layer. There are no support for advanced math like full blown physics engine, collision detection or response, but many popular engines exist that are fully compatible with Qt. Assets managementQt has a fully fledged resource management system that compiles resources into your binary. This is cross platform and supports any file type you need with special support for common image formats, svg, sounds, fonts, HTML, CSS. And loading and using resources is really simple since all of Qt's file handlign orutines accept URLs that point to these resources. Really awesome. Further the new effort in Qt3D 2.0 adds assimp support so any assets supported by assimp will also automatically be compatible with Qt resource system. 2D AnimationQt features a full framework for working with state machines. On top of this there sits a full framework for animating properties that can be used for making interactive UI in 2D (or even 3D if you play your cards right). It has all the stuff you expect like easing, automatic state transition and tons of convenience wrappers and ways of doing interesting stuff. It's like working with jQuery but in C++. |