2008-10-06 9 views
6

Ich programmiere eine Anwendung für eine 32 bit processor with limited memory (512k Flash, 32k RAM).Techniken für dynamische (algorithmische) Grafiken

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

Dinge, die helfen können:

  • Vielleicht kennen Sie eine Ressource für diese Art von Einschränkung
  • Vielleicht attraktive Grafiken on the fly
  • Gibt es einen generischen Algorithmus erzeugt haben Sie könnte ich Elemente im Programmspeicher (einschließlich Alpha-Blending) im laufenden Betrieb zu kombinieren, während ich die Anzeige scanne
  • Einfache Vektor-Rendering-Techniken (oder frei (bsd/mit/Apache) Quelle)
  • ???

Ich habe einen Multiplikator, aber keinen Gleitkomma-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

Antwort

8

In gewisser Weise sind Sie in so ziemlich dem gleichen Situation Spiele-Entwickler, wo zum Zeitpunkt des Tandys, Spectrums und frühe PCs. Also, hier ist meine Empfehlung:

Sie sollten Michael Abrash Schriften über Computergrafiken 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" here lesen.

Zusätzlich können Sie wahrscheinlich eine Menge der alten BBS-Dateien finden, die die meisten Leute am Tag verwendet haben, um die Grafikprogrammierung zu lernen here. Suchen Sie einfach nach Grafiken, Linien und was nicht.

Hoffe, dass hilft!

Update: Ich erinnere mich auch mit this 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.

3

Welche Art von Daten werden Sie auf dem Bildschirm anzeigen?

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.

2

Ich glaube, die grundlegende Technik für den Umgang mit dieser Art von Situation ist es, den Bildschirm in schmale horizontale Streifen zu teilen, und nur zwei solche Streifen im RAM Puffer. 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 Sie harte Timing-Grenzen haben, wie lange Sie für das Rendern jedes Streifens 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, dass Sie palettisiertes Rendering verwenden, zweitstellen. 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.

0

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

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