vrijdag 5 maart 2010

DxScene = WPF for Delphi

Een van de mooie onderdelen van .Net is WPF: hardware accelerated vector graphics. Ik zat eens te denken of zoiets ook niet mogelijk was voor Delphi. Er bestaat namelijk een open source project genaamd "GlScene": een 3D library voor OpenGL. Deze heeft echter beperkte (?) ondersteuning voor een normale GUI. Via via kwam ik bij "DxScene": deze heeft wel een uitgebreide set aan GUI controls! Hiermee kun je net als WPF mooie GUI's maken.

VxScene en DxScene, en Themes
Op de site staan een aantal onderdelen:

Het mooie is dat je deze eenvoudig kunt combineren. Zo kun je VxScene binnen DxScene gebruiken, bijvoorbeeld een 3d cubus met aan elke kant een invoerveld en een knop etc. Maar ook allerlei 3d effecten zijn mogelijk (transparancy, mirroring, particles(zoals vuur!), glow, etc). Een "cover flow" is bijvoorbeeld eenvoudig te maken:

Cover flow
Cover flow

Hardware accalerated vector graphics

Het voordeel van vector graphics is dat je deze eenvoudig kunt scalen (vergroten, verkleinen), zonder dat dit lelijk (blokkerig) wordt. Met DxScene/VxScene zijn deze ook nog eens hardware accalerated, zodat de CPU niet belast wordt! Ondanks allerlei effecten en transities in bijvoorbeeld de "cover flow" (demo exe) blijft de CPU 0%... Niet alleen video's kunnen met 3d effecten afgespeeld worden, ook flash animaties. Een andere mooie demo is bijvoorbeeld een combinatie van VxScene en DxScene, waarbij de GUI gedraaid en gescaled kan worden (demo exe):
3d GUI
3d GUI

Nog een mooi voorbeeld is deze applicatie die ermee gemaakt is: 3D Image Commander

Design time editor
In tegenstelling tot WPF kun je eenvoudig designtime WYSIWYG de GUI samenstellen. Niet zo RAD als je normaal met Delphi gewend bent, maar je hoeft in ieder geval niet zelf een XAML samen te stellen of via een externe tool als expression blend

Data Binding
Net als WPF kent het ook data binding: je kunt bijvoorbeeld de X-as rotatie koppelen aan een animatie component (lineair of een "path")

3d import
Omdat 3d objecten snel complex kunnen worden, is het handig om te weten dat je allerlei 3d formaten kunt importen: 3d studio max (.3ds), Half-life, Quake en Doom 3 models, maar ook SVG en en WPF Mesh models. Zie hier een demo exe.

Newton: physics engine
Nog leuker wordt het als je het combineert met een "physics engine", oftewel natuurkundige berekening! Een leuke demo hiervoor is de klassieker "Breakout" in 3d met bots berekeningen (demo exe):

3D Breakout met physics
3D Breakout met physics

Multi platform, OpenGl
Zoals de naam al doet vermoeden, gebruikt DxScene op Windows DirectX. Maar het is echter ook multi platform: je kunt met FPC ook native Linux en MacOS X executables maken! Het kan dus ook overweg met OpenGl. Daarnaast kun je ook voor softwarematige versnelling kiezen, maar dit is uiteraard wel CPU intensief en trager.

Commercieel
Enige nadeel is dat het commercieel is, al is 100 euro niet duur voor zoiets moois.

Links

Conclusie

Het is natuurlijk niet hetzelfde als WPF, maar je kunt er wel erg mooie dingen mee maken, die ook nog eens cross-platform zijn! En je hebt alles in 1 exe zitten: geen .Net 3.5 installatie oid nodig :-)