Forum: Mikrocontroller und Digitale Elektronik TFT Layer Ebene


von Frank (Gast)


Lesenswert?

Hallo,
Ich Arbeite mit einem TFT 800x480 mit SSD1963 controller,
wollte nun einzelne Elemente in den vordergrund und andere Elemente in 
den Hintergrund setzten.

Zurzeit stehe ich aber auf dem schlauch bei der Umsetzung.

kann mir da einer Weiterhelfen oder eine seite emphelen wo das gut 
beschrieben wird oder ein code wo man schauen kann wie das gemacht wird.

mfg

von c-hater (Gast)


Lesenswert?

Frank schrieb:

> Ich Arbeite mit einem TFT 800x480 mit SSD1963 controller,
> wollte nun einzelne Elemente in den vordergrund und andere Elemente in
> den Hintergrund setzten.

Das geht am einfachsten über die Reihenfolge, in der du die Elemente 
zeichnest. Immer von "hinten" nach "vorn" zeichnen und du brauchst keine 
weiteren Klimmzüge.

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Ich meinte das so wie im Anhang.

Wenn ich zb. zuerst ein Rechteck zeichne dann etwas versetzt noch eins 
zeichne
dann wird ja ein Teil vom ersten Rechteck durch  das zweite verdeckt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank schrieb:
> Wenn ich zb. zuerst ein Rechteck zeichne dann etwas versetzt noch eins
> zeichne dann wird ja ein Teil vom ersten Rechteck durch  das zweite
> verdeckt.

Richtig. Und genau das musst Du ausnutzen, indem Du alle Elemente in 
ihrer "Z-Order" sortierst und von hinten nach vorne ausgibst.

von Frank (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
>
> Richtig. Und genau das musst Du ausnutzen, indem Du alle Elemente in
> ihrer "Z-Order" sortierst und von hinten nach vorne ausgibst.

Wie wird das gemacht.
Gibs denn irgendwo eine seite wo das Beschrieben ist

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank schrieb:
> Wie wird das gemacht.


Du musst schon wissen, welche Elemente wann zu sehen sein sollen, d.h. 
die Z-Order muss Du selbst festlegen.

Einfache Übung:

Nimm ein Blatt Papier und ein paar unterschiedlich große Zettel.

Das Blatt Papier legst Du auf den Tisch und malst 'ne 0 drauf.

Jetzt nimmst Du den ersten Zettel, legst ihn auf das Papier und malst 
'ne 1 drauf. Den nächsten Zettel legst Du wiederum auf das Papier und 
auf den bereits draufliegenden Zettel -- und den beschriftest Du mit 2.

Und genau das ist Deine Z-Order.

0 - 1 - 2

Möchtest Du, daß der mit 1 beschriftete Zettel in den Vordergrund kommt, 
daß also Zettel 1 Teile von Zettel 2 verdeckt, musst Du die Reihenfolge 
ändern:

0 - 2 - 1

Mehr steckt nicht dahinter.

von Frank (Gast)


Lesenswert?

Aber wenn ich das so mache dann siehs ja nich so wie auf dem bild aus , 
oder irre ich mich da?

Gibs denn irgendwo eine Seite wo das gut beschrieben wird .

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

ich glaube er will auch wissen wie man das ganze transparent umsetzen 
kann.
Also wie bekomm ich zum Beispiel den Zettel transparent vor die Mauer 
...

von Frank (Gast)


Lesenswert?

Martin J. schrieb:
> ich glaube er will auch wissen wie man das ganze transparent
> umsetzen kann.
> Also wie bekomm ich zum Beispiel den Zettel transparent vor die Mauer
> ...

Ja Richtig .
mfg

von Noch einer (Gast)


Lesenswert?

Wenn du genug Hauptspeicher hast kein Problem. Die Mauer im Speicher des 
Controllers rendern, die Mischfarbe für das Overlay berechnen. Nur das 
Gesammtbild an das Display übertragen. (Findet sich unter dem Stichwort 
Alphakanal).

Theoretisch könnte auch das Display Farbmischung mit Alphakanal 
unterstützen.

von Noch einer (Gast)


Lesenswert?

... oder jeweils ein Pixel vom Display lesen, nach der Alphakanal-Formel 
die Mischfarbe berechnen und das Pixel ins Display schreiben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ob Transparenz oder nicht - das beschriebene Grundkonzept des 
nacheinander nach Z-Order ausgebens bleibt bestehen.

Nur die jeweilige Ausgabefunktion, mit der die Bildelemente ausgegeben 
werden, muss dahingehend angepasst werden, daß sie bevor sie ein Pixel 
ausgibt, den Inhalt des Bildspeichers an der betreffenden Stelle 
ausliest und das mit dem Wert des neuen Pixels verrechnet - "noch einer" 
nannte das "Alphakanalformel".

von Soul E. (Gast)


Lesenswert?

Die Trivial-Version des Alphakanals wäre, dass man nicht die Mauer-Bits 
im Speicher mit dem Zettel-Bits überschreibt, sondern mit dem Mittelwert 
aus Mauer und Zettel.

von Frank (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Ob Transparenz oder nicht - das beschriebene Grundkonzept des
> nacheinander nach Z-Order ausgebens bleibt bestehen.
>
> Nur die jeweilige Ausgabefunktion, mit der die Bildelemente ausgegeben
> werden, muss dahingehend angepasst werden, daß sie bevor sie ein Pixel
> ausgibt, den Inhalt des Bildspeichers an der betreffenden Stelle
> ausliest und das mit dem Wert des neuen Pixels verrechnet - "noch einer"
> nannte das "Alphakanalformel".

Könnte mir denn jemand eine Seite nennen wo dke Alphakanal formel 
beschrieben wird jnd wie man es in c umsetzt.
mfg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.