Cross-Platform + Grafik
Cross-Platform + Grafik
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
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
> 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
.
> 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.
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
> 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.
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
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
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.LordChaos hat geschrieben:Naja, ich brauche keine 3D-Sprites wenn die 2D-Sprites schnell genug sind. Mal sehen, wie sich das ergibt. :/
LordChaos
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.
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.> 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...
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?
/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?
