Frage Techniken für dynamische (algorithmische) Grafik


Ich programmiere eine Anwendung für eine 32-Bit-Prozessor mit begrenztem Speicher (512k Flash, 32k RAM).

Das Anzeige auf diesem Gerät ist 128x160 mit 16-Bit-Farbe, die normalerweise 40k RAM verbrauchen würde, wenn ich es auf meinem Prozessor puffern sollte. Ich habe nicht so viel RAM, also suche ich nach Techniken, Tipps, Tricks, Ideen, um Bildschirmdaten im Handumdrehen zu erzeugen.

Dinge, die helfen könnten:

  • Vielleicht kennen Sie eine Ressource für diese Art von Einschränkung
  • Vielleicht haben Sie während des Betriebs attraktive Grafiken erstellt
  • Gibt es einen allgemeinen Algorithmus, den ich verwenden könnte, um Elemente im Programmspeicher (einschließlich Alpha-Blending) zu kombinieren, während ich die Anzeige scanne
  • Einfache Vektor-Rendering-Techniken (oder freie (bsd / mit / Apache) Quelle)
  • ???

Ich habe einen Multiplikator, aber keinen Fließkomma-Prozessor. Das Display selbst hat einen sehr einfachen Controller und Speicher für das Display - aber Lese- und Schreibvorgänge sind teuer, also möchte ich das nicht als meinen Arbeitsbereich verwenden, wenn ich es vermeiden kann.

-Adam


6
2017-10-06 13:29


Ursprung


Antworten:


In gewisser Weise sind Sie in der gleichen Situation, in der Spieleentwickler zur Zeit der Tandys, Spectrums und frühen PCs waren. Also, hier ist meine Empfehlung:

Sie sollten Michael Abrash Schriften über Computergrafik lesen. Sie wurden in einer Zeit geschrieben, in der ein Fließkomma-Co-Prozessor eine optionale Hardware war, und sie beschreiben eine Menge der grundlegenden Techniken (Bresenham-Linien usw.), die in den alten (angeblich "schlechten") Software-gerenderten Tagen verwendet wurden .

Sie können die meisten seiner "Black Book" lesen Hier.

Außerdem können Sie wahrscheinlich eine Menge der alten BBS-Dateien finden, die die meisten Leute am Tag benutzt haben, um die Grafikprogrammierung zu lernen Hier. Suchen Sie einfach nach Grafiken, Linien und was nicht.

Ich hoffe, das hilft!

Aktualisieren: Ich erinnere mich auch daran zu benutzen Dies in meinen ersten Versuchen, Dinge auf dem Bildschirm zu zeichnen. Ich kann nicht sagen, wie viel Zeit ich damit verbracht habe zu versuchen, die Mathematik dahinter zu verstehen (naja, um fair zu sein, ich war damals 15). Sehr gute (und einfache) Einführung in 3D und eine sehr gute Premiere bei Transformationen, Polygon-Füllern und Interpolation.


8
2017-10-06 13:41



Welche Art von Daten werden Sie auf dem Bildschirm zeigen?

Wenn es sich nicht um fotografische Bilder handelt, können Sie eine Palette verwenden. Zum Beispiel: Eine 256-Farben-Palette, die 8 Bits pro Pixel verwendet, würde 20 KB erfordern (plus 256 × 2 Bytes für die Nachschlagetabelle), was mindestens besser ist als 40 KB.


3
2017-10-06 13:44



Ich glaube, die grundlegende Technik für den Umgang mit dieser Art von Situation besteht darin, den Bildschirm in schmale horizontale Streifen zu teilen und nur zwei solche Streifen im RAM zu puffern. Ein Streifen wird angezeigt, während Sie den nächsten nach unten rendern. Wenn der Scan-Strahl den nächsten Streifen trifft (und einen Interrupt auslöst, den Sie fangen können), vertauschen Sie die beiden und beginnen, den nächsten Streifen zu zeichnen.

Ein hässlicher Nebeneffekt davon ist, dass du es hast hart Timing-Grenzen, wie lange Sie für das Rendern jedes Stripe ausgeben können. Ich denke, es wäre verlockend, bei etwas Langweiligem zu bleiben, aber mit vorhersehbarer Leistung, wie Sprites.

Etwas offtopic, aber so funktioniert die Nintendo DS 3D-Hardware. Sie können es sehen, wenn Sie versuchen, zu viele Polygone um die gleiche y-Koordinate zu rendern - polys werden nach dem Zufallsprinzip flackern und fallen ab, wenn die Bildschirmauffrischung die darstellende Hardware überholt.

Außerdem würde ich den Vorschlag des anderen Posters, das palettisierte Rendering zu verwenden, als zweites vorschlagen. Es ist sehr schwer, schnelle Berechnungen mit 16-Bit-Pixeln durchzuführen, aber schneller mit 8-Bit, wenn Sie schlau sind, wie Sie Ihre Palette auslegen.


2
2017-10-06 14:17



Einige Ideen, die schöne Grafik und wenig Speicher kombinieren würden:

  • Speichern Sie Hintergründe und Sprites im Flash.
  • Speichern Sie dynamisch generierte Grafiken im RAM mit einer Palette zur Hälfte der Bytes.
  • Verwenden Sie die Fensterfunktion des LCD-Treibers, um nur den Teil des Bildschirms zu aktualisieren, den Sie benötigen.

0
2017-10-26 14:45