TrumEngine: Entwurf

In diesen Bereich gehören alle Themen, die bei der Entwicklung etwas mit Grafik und Design zu tun haben
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
phpbb forum styles
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: 2D-Engine

Beitrag von TrommlBomml »

ist machbar. nur solle euch dann klar sein, dass es nicht so einfach ist, linien mit gewünschter Dicke darzustellen, das würde dann nur wieder über gdi gehen. ich kann versuchen, auf 1.4 runterzugehen, kann aba nix versprechen (abschaltbar sind die effeklte natürlich :))
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Benutzeravatar
Sir Pustekuchen
Administrator
Administrator
Beiträge: 4183
Registriert: Dienstag 10. Januar 2006, 16:46
Kontaktdaten:

Re: 2D-Engine

Beitrag von Sir Pustekuchen »

Irgendwie muss das doch in DX gehen. Oftmals sieht man doch auch so ein Drahtgittermodell, bestehend aus Linien, in irgendwelchen 3D Viewern. Genauso sollte das doch auch für die Galaxiemap möglich sein. Falls dort keine Linien gehen, dann könnte man die ganzen Linien als einzelne Bitmaps zusammensetzen und anschließend skalieren. Die sollten aber bei sehr hohem Zoom nicht total fett werden, sondern immernoch die entsprechende Pixelbreite besitzten. Außerdem weiß ich nicht, wie performancekritisch solch ein Verfahren sein würde.
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Re: 2D-Engine

Beitrag von Malle »

Anscheinend sind die MS-Funktionen recht stupide..: http://rookscape.com/vbgaming/gtutAT.php
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: 2D-Engine

Beitrag von TrommlBomml »

ja doch es gehen Linien! nur das mit der dicke geht nicht so einfach, farbe und selbst transparenz is simpel, aber dicke lässt sich NUR über shader bzw. direkt auf die surface mit gdi/+ zeichnen! ANDERS geht es NICHT! :)
Malle hat geschrieben:Anscheinend sind die MS-Funktionen recht stupide
oftmals ja ;). das hat aber auch den grund, weil APIs anders programmiert werden als Engines oder Frameworks. die müssen teilweise "stupide" sein, damit man genug freiraum beik aufbauen konkreterer lösungen hat. und genau aus disem grund gibt es keinen direkten support von dicken linien^^.

eine einfache fast schon zu einfache lösung gibt es dennoch (Is mir grad beim tipseln eingefallen):

man könnte als punktliste texturen, die einen kreis drin ham (weiss biete sich an wegen farbmanipulation)nah aneinander rendern. das würde dann dem so ziemlich nahekommen, wie wenn man mit paint mit dem brush eine linie zeichnet. nah genug aneinander von den kugelrunden brush ergibts ne dicke linie.

EDIT:

autsch, das tut weh!
es geht ganz einfach. nen ausgefülltes rechtck is ja auch ne dicke linie^^. und das drehen von einem rechteck is ja nich schwer mit Direct3D. wobei das den nachteil hat, dass die ränder immer eckig sind. ist aber auf jeden fal die performanteste lösung^^. suchrts euch aus:

- Rechteck (most efficent, mittlere quali)
- PointSprite (less efficent, sehr gute qualität, linieneffekte möglich!)
- GDI (worst efficent, sehr gute quali)
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Re: 2D-Engine

Beitrag von Malle »

hab auch was evtl. passendes gesichtet: http://blogs.msdn.com/manders/archive/2 ... grams.aspx

Ansonsten wär ich für pointsprite. GDI bringt nichts vorteilhafteres außer dass es schon gecodet wurde und ein paar Effekte wären doch schön. Soviele Linien haben wir doch auch nicht drin dass wir tatsächlich Performanceschwierigkeiten bekämen oder puste?
Benutzeravatar
Sir Pustekuchen
Administrator
Administrator
Beiträge: 4183
Registriert: Dienstag 10. Januar 2006, 16:46
Kontaktdaten:

Re: 2D-Engine

Beitrag von Sir Pustekuchen »

Einfache Linien mittels GDI können sehr schnell gezeichnet werden. Dies wird sogar hardwarebeschleunugt. Zeichnet man aber Linien mit GDI+, so ist es sehr langsam. GDI+ wird von keinen Grafikkarten (außer Matrox) direkt unterstützt. Wenn man Punktlinien zeichnen mag, dann ist das auch mit der alten GDI zu langsam. Aber einfach nen MoveTo -> LineTo geht richtig schnell.

Die Linien kommen auch nicht sehr häufig vor. Wie gesagt nur auf der Galaxiemap und in manchen Menüs, wenn Texte ausgewählt werden sollen. Ich denke da müssen wir einen guten Mittelweg finden. Ich kann auch nicht sagen, welche Möglichkeit am besten sein wird.

@TrommlBomml:
Bau am besten einfach mal die Sache ein, wovon du denkst, sie wäre am optimalsten.
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: 2D-Engine

Beitrag von TrommlBomml »

Malle hat geschrieben:hab auch was evtl. passendes gesichtet: http://blogs.msdn.com/manders/archive/2 ... grams.aspx
das wäre eine verbesserte variante der Rechteckmethode. das dort genutzte instancing halte ich für überflüssig, wenn wirklich nicht so viele lines genutzt werden (ansonsten nicht von nachteil). das einzige was mir daran nicht so passt ist is der triangleoverhead. aber der vorteil wäre hier gegenüber den pointsprites, dass man keine texturen brauchen (wobei ich die textur eventuell zur laufzeit generiert hätte).

hmmm, also entweder:

- pointsprites
- "Modeled-Line" (die methode von Malle gefunden)

beides ist denke ich recht gleich performant, kommt auf einsatz an.
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Re: 2D-Engine

Beitrag von Malle »

TrommlBomml hat geschrieben:Beispielprogramm:

Ich habe wieder ein beispielprogramm für euch gemacht, dass ihr etwas handfestes habt. Es wird die Klasse CAnimSprite und alle besprochenen Aspekte demonstrieren.

EDIT: DAS MACHE ICH NOCH SRY
;)

sieht sehr elegant aus. Ich nehm mal an, den Punkt CAnimSprite kann man auch in der To-Do-Liste in deinem ersten Post abhaken?
Benutzeravatar
Sir Pustekuchen
Administrator
Administrator
Beiträge: 4183
Registriert: Dienstag 10. Januar 2006, 16:46
Kontaktdaten:

Re: Entwurf

Beitrag von Sir Pustekuchen »

@TrommlBomml:
Die Daten fehlen noch.

@Malle:
Du kannst schonmal eine oder auch paar mehr Spheremaps für Planeten aus deiner Sammlung rauskramen ;-) Da kann TrommlBomml diese gleich beim Proggen benutzen und sehen wie gut es läuft. Als einer der nächsten Schritte stehen nämlich die rotierenden Planeten an :-)
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: Entwurf

Beitrag von TrommlBomml »

demo is geuppt^^

sirPustekuchen das stimmt nich ganz, erst kommen noch schrift ^.^
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Re: Entwurf

Beitrag von Malle »

Für die Planeten als einer der nächsten (nicht unbedingt der nächste ;)) Schritte haben wir auf alle Fälle mehr als genug Texturen. Die Frage ist nur, wie weit wollen wir die Planeten ranzoomen lassen. Bei Werten > 128x128 reichen die 512x256 Texturen nicht mehr aus und wir müssten die deutlich größeren, auch vom Platzbedarf her, 1024x512er nehmen, dann würd ich allerdings 85%iges jpg als Format vorschlagen weil durch die Rotationsbewegung lassen sich solche Details wie jpg Artefakte eh nicht feststellen im Vergleich zu einem gewöhnlichen Standbild.

Aus Legalitätsgründen werd ich wohl nochmal alle Texture-Packs von celestiamotherlode.net einzeln runterladen müssen, weil ich irgendwie anscheinend in meiner Sammlung die readme.txt's alle gelöscht habe und es doch ein paar gibt, die ausdrücklich eine Benutzung außerhalb Celestias nicht gestatten :evil:


Edit: Die Demo läuft bei mir nicht. Es kommt sofort ein Anwenungsfehler wegen nicht richtig konfiguriert etc.
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: Entwurf

Beitrag von TrommlBomml »

Malle hat geschrieben:bin blind, seh sie nicht
hmpf, an die falsche stelle gesetzt^^. Ich habs direkt beim Punkt Beispielprogramm jetzt verschoben und der code vom Sanple ist jetzt auch da.
Malle hat geschrieben:Die Frage ist nur, wie weit wollen wir die Planeten ranzoomen lassen. Bei Werten > 128x128 reichen die 512x256 Texturen nicht mehr aus und wir müssten die deutlich größeren, auch vom Platzbedarf her, 1024x512er nehmen, dann würd ich allerdings 85%iges jpg als Format vorschlagen weil durch die Rotationsbewegung lassen sich solche Details wie jpg Artefakte eh nicht feststellen im Vergleich zu einem gewöhnlichen Standbild.
Es reicht vollkommen, wenn da 512x512 pngs für die Spheremaps sind. Du musst bedenken, Bei Magnification gibt es ja die Filter, wie etwa anisotropische Filterung, die das ganze doch sehr gut aussehen lassen. Ich schlage PNG wegen verlustfrei vor. Wenn ihr schon Qualität wollt, dann bitte keine jpgs. PNG ist mehr als ausreichend, eine 512x512 braucht ca. 500kb.

Nochmal was allgemeines zur Engine:

Ich habe mir das ganze nochmal durch den Kopf gehen lassen und bin doch dafür, dass wir das ganze als dll oder statische Lib machen, und zwar aus folgenden gründen:

1. Kompilierzeit: Euer projekt ist sehr groß. wenn dann Die Engine dabei ist und was verändert wird, muss alles kompiliert werden. als extra solution in eurem Projekt habt ihr da keine probs. ausserdem erspart ihr euich kopieren, wenn ihr z. b. irgend einen Editor mit der Engine rendert.
2. Includes: ihr müsst euch nicht mit den ganzen includes rumschlagen, die ich anders mache wahrscheinlich als ihr, mit <> anstatt ""

denkt mal drüber nach. vor allem, punkt 1, auch wenn die engien sehr klein ist, kann was sparen. das andere ist auch einheitlicher, man muss nich ständig umdenken, und ich kann einfacher aktualisieren und schon kompilieren, damit ihr das nicht machen müsst.
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Re: Entwurf

Beitrag von Malle »

echt-quadratische Projektionen haben wir nicht. Die Texturen, die wir haben, sind alle Zylinderprojektionen: http://en.wikipedia.org/wiki/Plate_carrée_projection mit einfacher Transformationsgleichung.

so gesehen haben wir ein Problem, weil 512x512 natürlich mehr Bildinfo speichert als 512x256. Aber wir könnens ja erstmal so lassen.

A propos, wie oben per Edit eingefügt: bei mir läuft die Beispieldemo nicht. Anwenungskonfigurationsfehler..
Benutzeravatar
Sir Pustekuchen
Administrator
Administrator
Beiträge: 4183
Registriert: Dienstag 10. Januar 2006, 16:46
Kontaktdaten:

Re: Entwurf

Beitrag von Sir Pustekuchen »

Mit einer Lib wäre ich auch zufrieden. Beim Demo fehlt irgendeine Dx9_30.dll oder so ähnlich. Kann es auch nicht starten (Arbeitsrechner).
TrommlBomml
Supporting Programmer
Supporting Programmer
Beiträge: 45
Registriert: Montag 2. Juni 2008, 19:58
Wohnort: nahe berlin

Re: Entwurf

Beitrag von TrommlBomml »

http://www.dll-files.com/dllindex/d3dx9 ... 0VDhTIUHeR

kopier sie dir ins windoof/system32 ordner. dann hast ruhe. ansonsten müssen wir die dann mitliefern, botE. mein webspace is auf 1,5mb begrenzt pro datei. deswegen lad ich die nie mit hoch.

ansonsten sollte es gehen. liegt es an der anwednungsconfig, dann brauchste das visual studio 2008 redistributable, das sind die CRT-dlls. is noch debug kompile, wenn das gar net geht lad ich später nochmal die release hoch (sry bin zurzeit nen bissle verplant). muss jetz blos arbeiten, mach ich wenn ich wiederkomm!
"Man kann zu laut Musik hören, aber nicht zu laut Metal!"

"Religionskriege sind Konflikte zwischen erwachsenen Menschen, die sich darum streiten, wer den cooleren, imaginären Freund hat."
Antworten

Zurück zu „Grafik und Design“