Textanzeige auf bestehenden Spiel
-
Moin.
Ich wage mich grade für ein Projekt an Grafikprobleme ran.
Es geht letztlich erstmal darum, bei einem älteren Spiel(DX6) einen einfachen einzeiligen Text auszugeben. Das einzige was ich mit diesem Text machen muss und machen will, ist eine Farbe dazu auszuwählen, als Font reicht eine einfache vordefinierte Font von der WinApi und wenn es auf einfachem Weg geht, kann der Text noch einen Rand haben, um ihn extra hervorzuheben.
Über C und WinApi habe ich dazu bisher einfach mit DrawText auf das Vollbild-Spiel gezeichnet. Das ganze in einer while-Schleife verpackt, bringt einige Probleme mit:
1. Flackern
2. Performance
3. System-FehlerUm diese Probleme zu lösen, möchte ich nun andere Technik anwenden.
Von dem Spiel, welches, wie erwähnt, auf DirectX 6 basiert, habe ich keinen Source-Code.
Ist es grundsätzlich möglich, mit OpenGL einen einfachen Text, wie oben beschrieben, auszugeben?
Des Weiteren, falls sich jemand damit auskennt, wäre dies auch mit DirectX 8.1 möglich? Dabei ist eben einfach die Frage, ob sich DX 6 und DX 8.1 so einfach mischen lassen.Ein bisschen habe ich mich damit schon beschäftigt und bin letztlich zu dem Entschluss gekommen, dass eine einfache Bitmap, ohne jegliche zusätzliche API-Funktionen ausreicht. Ich nehme an das ist wohl so richtig.
Da ich ein totaler Anfänger bin was generell grafisches anbelangt, bräuchte werde ich wohl öfters hier schreiben, aber zunächst werde ich es bei diesen Fragen belassen.
Ich hoffe, jemand hat die Zeit und Lust mir meine Fragen zu beantworten.
Mit freundlichen Grüßen
Moadeh
-
Habe ich die Frage(n) so unverständlich formuliert, dass niemand weiß, was ich nun wirklich machen möchte oder weiß keiner eine Antwort?
-
Moadeh schrieb:
Ein bisschen habe ich mich damit schon beschäftigt und bin letztlich zu dem Entschluss gekommen, dass eine einfache Bitmap, ohne jegliche zusätzliche API-Funktionen ausreicht. Ich nehme an das ist wohl so richtig.
Wenn Du es auf diese Art angehen willst müssten BitmapFonts das richtige für Dich sein.
Dh: Alle benötigten ASCII Buchstaben werden nacheinander in eine Bitmap gepackt. Anschließend bastelst Du Dir eine Funktion welche die Position der benötigten Buchstaben ermittelt. Das ganze sieht deutlich "schöner" aus als StandardTTF-Fonts etc, bringt aber auch den Nachteil der eingeschränkten Skalierbarkeit mit sich. Geschwindigkeitstechnisch solltest Du damit aber schneller sein, da die Fonts nicht mehr gerastert werden müssen.
Moadeh schrieb:
Dabei ist eben einfach die Frage, ob sich DX 6 und DX 8.1 so einfach mischen lassen.
Man kann in jedem Fall verschiedene DirectX SDK's parallel installieren.
Versuch's doch mal
Die "Befehle" sollten sich ja mit jeder Folgeversion leicht im Namen unterscheiden D3D8XXX, D3D9XXX etc...(EDIT: Aussage gefällt mir nicht)
-
Moadeh schrieb:
Habe ich die Frage(n) so unverständlich formuliert, dass niemand weiß, was ich nun wirklich machen möchte oder weiß keiner eine Antwort?
Btw: Bitte lesen! Zitat: "Im Allgemeinen ist ein einfaches Wiederposten eine schlechte Idee. Das wird als zwecklose Belästigung angesehen. Habe Geduld: die Person mit deiner gesuchten Antwort könnte gerade schlafen. Oder deine Frage war von Anfang an nicht gut gestellt."
Wird sich schon noch einer finden

-
XHansWurstX schrieb:
"Oder deine Frage war von Anfang an nicht gut gestellt."
Eben darum ging es mir ja. Oft höre ich, dass keiner weiß, was ich nun wirklich fragen will. Für den Fall hätte ich es dann nochmal versucht

Da das Spiel in DX6 ist, werde ich des später mal ausprobieren. Vorerst soll das aber mal mit OpenGL tun.
Ich hatte mir eine Tutorial von NeHe angeguckt und wollte das so umbauen wie ich das wollte. Rein zum testen.
Für den DeviceContext muss scheinbar ein RenderContext und ein Pixelformat gesetzt werden. Wenn ich nun versuche über FindWindow das Spielfenster-Handle zu bekommen, kann das Programm weder Pixelformat setzen, noch den RenderContext. hwnd ist nicht ungültig und hdc auch nicht.
Aber eigendlich muss das Fenster ja auch schon fertig initialisiert sein und zum zeichnen bereit. Das tut es ja auch. Daher müsste es wohl auch einfach ausreichen, den DC zu ermitteln und darauf zu zeichnen, ohne irgendwas zu setzen, wie bspw. das Pixelformat. Ist das richtig?Ansonsten noch eine Frage:
Keine dieser gl-Funktionen braucht als Argument hwnd oder hdc, wird also einfach auf den Bildschirm gezeichnet(aber auch das tut es ja nicht), oder wie läuft das ab? Letztlich würde es dann überhaupt kein Sinn machen ein Pixelformat zu setzen.So, dabei belasse ich das erstmal.
-
Moadeh schrieb:
Keine dieser gl-Funktionen braucht als Argument hwnd oder hdc, wird also einfach auf den Bildschirm gezeichnet(aber auch das tut es ja nicht), oder wie läuft das ab? Letztlich würde es dann überhaupt kein Sinn machen ein Pixelformat zu setzen.
Die gl-Funktionen zeichnen (unter Windows) auf den aktuell gebundenen Rendering Context. Der kann an einem Device Context eines Fensters hängen, an einer Bitmap, sogar am Drucker.
Zu deinen anderen Problemen: Ich habe persönlich noch nichts mit DirectX gemacht, aber vermute, dass du das nicht einfach so mischen kannst.
-
Hallo,
du wirst vermutlich nicht darum kommen, dich in den Prozess der Anwendung einzuklinken, um eigene Sachen mit Hilfe von DirectX zu zeichnen . Daher: Google nach Wrapper DLL oder DLL Injection. Dann kannst du deinen Text aus der DLL heraus auf den Bildschirm bringen (z.B. mit der Bitmap-Methode - ich denke das ist dann das kleinere Problem).