Seite 1 von 2

Cross-Platform + Grafik

Verfasst: 10.08.2005 00:37
von LordChaos
Hallo.

Dies ist mein erstes Post hier, ursprünglich arbeitete ich viel mit BlitzBasic und kurz auch mit BlitzMax (Demo). Allerdings scheint OOP nicht so mein Ding zu sein (BMax ist OOP). Trotzdem brauche ich schnelle Alpha-Effekte. Deswegen fällt BlitzBasic für mich weg, und BMax auch, da ich aus den OOP-Features keinen Nutzen ziehen kann und mir 80$ für einen Alphaeffekte-Aufsatz zu schade sind.

Also wollte ich mich mal etwas über PB schlaumachen bevor ich es mir tatsächlich kaufen würde:

Sind tolle Alphaeffekte und RT-Rotation usw. mit normalen 2D-PB-Sprites möglich, oder brauche ich dafür 3D? (mit externen DLLs will ich nicht arbeiten)
Wie steht das mit der Multiplatformsache? Muss ich da viel abändern, oder kann ich problemlos auch PB-Anwendungen die unter Windows mit DX arbeuteb unter Linux compilieren? Wie werden da z.B. die I/0-Funktionen benutzt?

Und zu guter letzt: Ich habe mir einige grafik-spezifische Sachen angesehen. Ich wollte gerne meine Anwendung im Fenster laufen lassen. Kann ich auch DirectX-Anwendungen im Fenster laufen lassen? (es scheint so als würde PB im Fenster immer das GDI benutzen!?)

Danke schon mal im Voraus,
LordChaos

Verfasst: 10.08.2005 00:46
von MVXA
> Sind tolle Alphaeffekte und RT-Rotation usw. mit normalen 2D-PB-Sprites möglich, oder brauche ich dafür 3D?
Alphaeffekte sind in PB ein heikles Thema. Alpha Channels werden beim
Laden der Sprites ignoriert. Du kannst eine Farbe nur als komplett
Transparent setzen oder die Sprite an sich mit einem Alpha Wert darstellen.
Einzelne Farben mit einem bestimmten Alpha Wert darstellen geht nicht.

RT-Rotation sind möglich. Allerdings nur auf die Sprite3D beschränkt.
Du musst also vorher alle Sprites fertig generiert haben, dann zu einer
Sprite3D umwandeln und diese dauerhaft nutzen oder du nimmst
Geschwindigkeit Einbußen hin und erstellst jedes mal die Sprite3D neu.

> Wie steht das mit der Multiplatformsache?
Habe selbst damit leider noch keine Erfahrungen gemacht aber es soll
eigentlich ganz gut klappen. Hier lasse ich am besten die Anderen
schreiben :lol:.

> Kann ich auch DirectX-Anwendungen im Fenster laufen lassen?
Klar. Dafür gibt es in Purebasic den Befehl "OpenWindowdScreen". Dieser
Befehl öffnet ein DrecX Screen auf einem Fenster.

Verfasst: 10.08.2005 00:52
von LordChaos
Hm, mal sehen. Klingt bis jetzt ja ganz gut. Wenn der Cross-Platform-Support wirklich so gut ist wäre es ja auch eine Möglichkeit gleich komplett auf 3D-Sprites umzusteigen (wenn das auch bei Linux problemlos geht). Dann hätte ich ja diese Rotations- und Alphaprobleme nicht. :)

Allerdings habe ich das noch nicht gabz verstanden mit dem Alpha-Support. :/ Also Alpha-Channel beim Laden ist mir egal, ich will halt z.B. ein Sprite schön schnell 50% durchsichtig darstellen.

LordChaos

Verfasst: 10.08.2005 00:53
von MVXA
> Also Alpha-Channel beim Laden ist mir egal, ich will halt z.B. ein Sprite schön schnell 50% durchsichtig darstellen.
das ist machbar. Allerdings ist das eine Frage der Geschwindigkeit...

Verfasst: 10.08.2005 01:02
von Zaphod
sprite 3d gibt es nicht unter linux. ich weiß, ich ärgere mit der aussage wieder freak, aber imho ist die platformunabhängigkeit von pb im moment noch ziemlich schwach.

Verfasst: 10.08.2005 01:13
von LordChaos
Naja, ich brauche keine 3D-Sprites wenn die 2D-Sprites schnell genug sind. Mal sehen, wie sich das ergibt. :/

LordChaos

Verfasst: 10.08.2005 01:54
von Ynnus
LordChaos hat geschrieben:Naja, ich brauche keine 3D-Sprites wenn die 2D-Sprites schnell genug sind. Mal sehen, wie sich das ergibt. :/

LordChaos
Die 2D-Sprites sind, dadurch dass sie auf Softwarebasis realisiert werden, nicht besonders flott. Auf meiner Kiste etwa 2000 Sprites pro Frame bei 30 FPS.
Die mittels DirectX erzeugten 3D-Sprites sind zumindest theoretisch flotter, getestet hat das afaik noch niemand so genau. Aber da sie per Hardware gerendert werden, müsste es eigentlich schneller zugehen. Zumindest wenn es um Effekte geht, Blending, Transparenz, dann kann das 2D-Zeugs nicht mehr mithalten, da bekommst du vielleicht 20 Sprites pro Frame noch flüssig auf 30 FPS, alles weitere drückt rein. (Ebenfalls Softwarebasis, daher umständliche Transparenzberechnung).
OpenGL beispielsweise bekommt auf meiner Kiste 7000 3D-Gebilde mit 4 Ecken (sprich ein Viereck aus 2 Polygonen, entspricht also einem Sprite) mit > 30 FPS hin. Dabei berücksichtigt wird der Alphakanal der TGA-Textur welche Transparenz und durchlässige neblige Flächen erzeugen kann. (in den Tests war Alphablending durch gängig angeschaltet bei allen 7000 Sprites).
Da Blitzmax auch auf OpenGL setzt, kann ich mir denken, dass dort ein erheblicher Geschwindigkeitsvorteil gegeüber normalen PB-Sprites besteht. Allerdings kann auch PB OpenGL ansprechen. Nicht direkt ohne Weiteres aus der Standardbibliothek heraus, aber es lässt sich einbinden, afaik ohne DLL.
In Sachen Grafik wirst du wohl mit Linux und PB nicht auf die vorhandenen Dinge wie die 3D-Sprites zurückgreifen können, da musst du OpenGL einbauen. Die 2D-Sprites sind meiner Auffassung nach altgebacken und taugen nicht für moderne 2D-Grafik mit möglichst vielen bunten Effekten usw.
> Also Alpha-Channel beim Laden ist mir egal, ich will halt z.B. ein Sprite schön schnell 50% durchsichtig darstellen.
das ist machbar. Allerdings ist das eine Frage der Geschwindigkeit...
Die Antwort lautet: Dir werden kaum maximal 20 Sprites pro Frame bei anständigen FPS ausreichen, also kommen 2D-Sprites nicht in Frage. 3D Sprites sind nicht portabel, also bleibt nur OpenGL, wenn es auf Linux rüber soll.

Verfasst: 10.08.2005 06:10
von MVXA
>OpenGL beispielsweise bekommt auf meiner Kiste 7000 3D-Gebilde mit 4 Ecken
Dann würde ich dich mal jetzt darum bitten, dass du deine Sprite Engine als
DLL compilierst und hier zur Verfügungstellst. Ich gehe dann auf die Knie vor
dir :praise:

Verfasst: 10.08.2005 11:14
von LordChaos
Naja, dann werde ich mich mal nach OpenGL umschauen. Es scheint ja schon einige Leute gegeben zu haben die sich intensiv damit beschäftigt haben. :)


/edit: Hm, sobald ich das OpenGL-File aus diesem PBGL-Tutorial include, ist PB der Source zu groß. Ich verstehe ehrlich gesagt auch die Politik des Herstellers nicht so. :/ Wie soll ich z.B. die großartige Geschwindkeit testen wenn immer der Debugger an ist? :|

Verfasst: 10.08.2005 11:48
von bluejoke
tja, für so tiefgehende Tests braucht man halt die Vollversion

Geschwindigkeitsvergeliche gibts aber doch schon genug