Widgetek 3D-ben: WolfenQt

 ( szotsaki | 2008. december 2., kedd - 16:51 )

A Qt blogról:

Sok ember kérdezi, hogyan ágyazza be a Qt által rajzolt tartalmat (különösen a Qt widgeteket - pl. checkbox, lenyíló menü, böngésző, médialejátszó stb.) 3D-s térbe.
Ezt már azóta szerettem volna megtenni, amióta a QTransform teljesen támogatja a kivetítéses transzformációkat, így leültem, és megírtam ezt a bemutatót. Hadd mutassam be WolfenQt-t:

http://www.youtube.com/watch?v=MXS3xKV-UM0&fmt=18

A Wolfenstein like maze theme was chosen because of ease of implementation, you could of course embed a widget onto any 3d surface. The trick is to create a 3d transform mapping from a 2d plane (where the widget or other Qt drawn graphics resides) onto any quad in 3d space, and then do a perspective projection, before converting the 3d transform to a QTransform. Now, by making all the widgets and wall segments graphics items, you only need to use QGraphicsItem::setTransform() with the custom created transform and QGraphicsView will handle all event translation for you. The way the camera movement works is by recomputing and resetting every item’s transform on each frame. To avoid having to continuously redraw all the widgets if they’re not being updated, QGraphicsItem::setCacheMode(QGraphicsItem::ItemCoordinateCache) is the way to go.

I’ve embedded Qt’s media player demo to show the ability to embed videos in a QGraphicsView as tbastian blogged about just recently: Videos get pimped

I’ve also embedded the 3d .obj model viewer I blogged about earlier to show how to mix in OpenGL content by setting up the correct projection and modelview matrices. Note that except from this 3d model everything else is drawn using QPainter with QTransform, both the walls, sprites, and widgets.

Now, this example might not be the most useful thing in the world, but it’s meant as a demonstration of how you can stretch the Qt API in new directions.

Want to play with the source? It’s available through our gitweb at http://labs.trolltech.com/gitweb?p=WolfenQt;a=summary

Note that the performance against Qt 4.5 is better than against Qt 4.4, so if you try it out you might want to use the 4.5 snapshots at the moment. For the very best performance run with the “-graphicssystem raster” option (So long and thanks for the blit!). Also, there sees to be some bugs regarding certain widgets not being shown on Windows/Mac. Left-clicking links in embedded QWebViews is also broken at the moment.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ötletes!

Hat lehet dobom a gtk -t es qt-re valtok :)
kiprobalasnak mindenkepp megnezem ...
szep demo.

szép napokat
zsömi

meg jo, hogy en elobb a qt-t kezdtem. Most nem kell eldobnom semelyik masik gagyit :)

ja, csak az a baj, hogy nekem a gnome felulete meg mindig jobban tetszik mint a kde.

szép napokat
zsömi

csak az a baj, hogy itt senki nem beszelt errol.

csak az a baj, hogy qt-hez van gtk motorral megjelenitett tema.

csak az a baj, hogy regen tulmutat a qt a gnome-kde nyalakodason, es lehet benne Vistatol OSX-en at s60-ra, mindenre fejleszteni a nativ lookandfeelnek megfelelo alkalmazasokat.

es az a jo, hogy a legtobben ezt nem tudjak, decsakagnomajo!1!!!1

Na de a temahoz visszaterve, te talan azert preferalod fejleszteshez a gtk-t, mert a kde csunya...?

Az az igazsag, hogy a Gtk sem rossz annak, aki inkabb a pure C-t kedveli. Arrol nem beszelve, hogy a Gtk telleg csak GUI lib, a Qt meg... halozat, xml, webbrowser... es meg ki tudja mi. Hozzatennem, hogy a Gtk != Gnome, noha ez utobbi az elobbire epit.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

GUI-t OOP nélküli nyelvben fejleszteni, ez valami mazochizmus vagy elmebetegség?

"a Qt meg... halozat, xml, webbrowser..."

Ez a portolhatóság szempontjából előnyös. Ha mindenre Qt libet használsz, akkor biztosan nem fogsz szívni, ha más oprendszerre vagy fordítóra kell portolni a programot.

+1

nincs husznotfele threadezesre felkeszites, a qt majd megcsinalja helyetted. Na mindjart jonnek a javasok, hogy ugye nemcsak az o segguk van kinyalva :)

1) Szep az, ami erdek nelkul tetszik. Ha valakinek az tetszik, hogy nem hasznal OO-t, az neked miert faj?

2) En nem allitottam, hogy ez rossz dolog, csak a Qt kornyezet ennek kovetkezteben meretben nagy, hiszen komplett alrendszereket hordoz. Van, ahol szamit a footprint a lemezen is.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

1. Nem fáj, csak nem értem.

2. Qt 4.x moduláris, lehet pl. csak a core és a gui komponenst használni.

Ja, de telepiteni csak komplett lehet mint runtime-t.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Valóban, egy csomagban vannak. Amúgy nem tudom, nem lehet-e/miért nem lehet szétszedni.

"This is the Qt4 dance!.." :D

Állati, kíváncsi leszek, mikor jelenik meg az első full 3D-s desktop ;)!

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

em sokkal azután, hogy kitalálták a jó felbontású használható "full 3D"-s megjelenítőt.