Forum: Mikrocontroller und Digitale Elektronik 3d auf dem AVR


von Jens (Gast)


Lesenswert?

Hi,

ich würde gern so eine Animtion:

http://www.youtube.com/watch?v=btgTwdvES1g

http://www.youtube.com/watch?v=LUDM_oSndOY

http://www.youtube.com/watch?v=NEacQxw05Rg

http://www.youtube.com/watch?v=XgEYBqEIDEY

Auf meinem Display laufen lassen. Ich habe den Displayinhalt im Speicher 
stehen. Display wird über Interrupt auf Stand gehalten.

Kennt jemand ein AVR Projekt welches hierfür als Grundlage herhalten 
könnte.

JJ

von Peter II (Gast)


Lesenswert?

Jens schrieb:
> Kennt jemand ein AVR Projekt welches hierfür als Grundlage herhalten
> könnte.

was brauchst du noch für Grundlagen? ist doch nur ein wenig Mathematik. 
Sin als Tabelle ablegen und das alles mit INT rechnen.

Das ganze habe ich vor 15Jahren auf einem 286 ohne internet hinbekommen.

von bitte löschen (Gast)


Lesenswert?

Hast Du in dem ersten Video mal auf "mehr Anzeigen" geklickt? Da ist ein 
Link zum Source Code.

von Jens (Gast)


Lesenswert?

Hi,

nein, aber jetzt. Man man, das ist ja ein ordentliches asm Listing und 
auch ganz gut kommentiert.

Naja, ich suche jedoch etwas in "c" hätte ich vielleicht dazuschreiben 
sollen. Dazu gehören so viele Teile, wie cos und sin implementierungen, 
Tabellen, Matritzen Konvertierungen etc.

Ich habe die PICs vor 10 Jahren in asm programmiert, bei den AVRs bin 
ich dann jedoch gleich in c eingestiegen.

Ich suche eigentlich ein kleines Projekt das beschreibt wie man das 3d 
Objekt in c anlegt, also wie man es zusammensetzt und dazu das Stück 
Software welches dieses Objekt letztendlich erzeugt, 2D wandelt und in 
meinen Grafikspeicher schreibt.

J

von Peter II (Gast)


Lesenswert?

Jens schrieb:
> Ich suche eigentlich ein kleines Projekt das beschreibt wie man das 3d
> Objekt in c anlegt, also wie man es zusammensetzt und dazu das Stück
> Software welches dieses Objekt letztendlich erzeugt, 2D wandelt und in
> meinen Grafikspeicher schreibt.

und warum nicht mal selber gedanken machen? Programmieren ist docht 
nicht Copy&Paste.

von Jens (Gast)


Lesenswert?

@Hi Peter II,

ich habe doch schon programmiert, auf meinem Display laufen schon 
Uhrzeiten, Zahlen, Daten etc...

>> Programmieren ist docht nicht Copy&Paste.

hmm, ich habe immer gedacht c ist genau dazu erfunden worden. Es geht 
auch nicht darum nur zu kopieren, der Code wird dann eh angepasst. So 
wäre es nur wesentlich leichter dort einzusteigen, was ist daran falsch?

Naja, ich möchte auch niemanden auf die Füße treten. Bei anderen 
Projekten habe ich auch Teile verwendet wie z.B. DCF77 von Peter, oder 
Funktionen zum Kreise und Linien zu zeichnen von APE oder Funktionen und 
Programme um Schriftarten vom PC zum Controller gepackt abzuspeichern 
und aufzurufen. Ich selber gebe meine Ergebnisse dann wieder hier ab.

Ein geben und Nehmen, oder?

Gruß,
JJ

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> das beschreibt wie man das 3d
> Objekt in c anlegt,

Das Format kannst du dir prinzipiell selbst aussuchen, es könnte aber 
praktisch sein, etwas vorhandenes wie z.B. Wavefront OBJ zu nehmen. OBJ 
hat Vertex Koordinaten, wahlweise Faces und optional auch 
Oberflächendefs. Ist einfaches Textformat. Ich häng dir mal was kleines 
in dem Format an, einen simplen Würfel.

Jens schrieb:
> und dazu das Stück
> Software welches dieses Objekt letztendlich erzeugt

Das Stichwort lautet 'Transformationsmatrix'. Die Suchmaschine deiner 
Wahl hat da garantiert Treffer.

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:

> auch nicht darum nur zu kopieren, der Code wird dann eh angepasst. So
> wäre es nur wesentlich leichter dort einzusteigen, was ist daran falsch?

Such dir ein Online-Tutorial, das dir die Grundlagen der 3D-Grafik näher 
bringt. Nur aus dem Code heraus verstehst du sowieso nicht, wie und 
warum das funktioniert. Ein bischen Theorie ist dazu schon notwendig - 
aber so schwer ist das auch wieder nicht.

> Projekten habe ich auch Teile verwendet wie z.B. DCF77 von Peter, oder
> Funktionen zum Kreise und Linien zu zeichnen von APE

Und? Hast du auch verstanden, WIE sie funktionieren? Genau das ist der 
springende Punkt. Eine Zeitlang kann man auch ohne dieses Wissen leben. 
Aber irgendwann ist dann eben Ende der Fahnenstange.

> Ein geben und Nehmen, oder?

Ja - in erster Linie Wissen.

Nur gibt es eben auch Dinge, die kann man mit den begrenzten Mitteln 
eines Forums nicht vernünftig vermitteln. Dazu gibt es dann (unter 
anderem) Tutorien.

Soooo schwer ist 3D Grafik auf diesem Niveau auch wieder nicht. Aber 
eben auch nicht simpel genug, dass man es in 10 Sätzen erklären kann.

von Edson (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Soooo schwer ist 3D Grafik auf diesem Niveau auch wieder nicht. Aber
> eben auch nicht simpel genug, dass man es in 10 Sätzen erklären kann.

Für Peter II schon, der hat das alles schon vor 15 Jahren auf dem PC 
gemacht. Also kann er das auch für nen ATMega aus dem Ärmel schütteln, 
oder? ;)

von Karl H. (kbuchegg)


Lesenswert?

Edson schrieb:
> Karl Heinz Buchegger schrieb:
>> Soooo schwer ist 3D Grafik auf diesem Niveau auch wieder nicht. Aber
>> eben auch nicht simpel genug, dass man es in 10 Sätzen erklären kann.
>
> Für Peter II schon, der hat das alles schon vor 15 Jahren auf dem PC
> gemacht. Also kann er das auch für nen ATMega aus dem Ärmel schütteln,
> oder? ;)

Die Mathe dahinter ist auf einem AVR auch nicht anders als auf einem PC. 
Und auf einem 286 war man auch damals schon gut beraten, wenn man sich 
der Sache mit Integer-Arithmetik näherte.

(Und Peter II war nicht der einzige, der das vor 20 Jahren schon gemacht 
hat)

von Peter II (Gast)


Lesenswert?

Edson schrieb:
> Für Peter II schon, der hat das alles schon vor 15 Jahren auf dem PC
> gemacht. Also kann er das auch für nen ATMega aus dem Ärmel schütteln,
> oder? ;)

warum denn nicht, klar werde ich auch ein paar tage damit verbingen. 
Aber wenn man die Grundlagen kennt, dann verbinge ich die Zeit wirklich 
mit Programieren und Anpassend an die Bedürfnisse vom AVR und nicht mit 
der Suche im Internet nach Code den ich nicht verstehe.

von Edson (Gast)


Lesenswert?

> Die Mathe dahinter ist auf einem AVR auch nicht anders als auf einem PC.

Das ist mir schon klar. Vielleicht fallen dir ja noch Unterschiede im 
Bereich der Hardware auf. Und der Smilie am Ende meines Kommentars...

> (Und Peter II war nicht der einzige, der das vor 20 Jahren schon gemacht
> hat)

Wahrscheinlich haben sich auch vor 30 Jahren schon Leute damit 
beschäftigt, aber was soll das bitteschön aussagen bzw. was hat der TE 
davon?

Leider finde ich den Eintrag in einem anderen Forum nicht, wo das Thema 
in C auf einem PIC24 behandelt wurde. Vielleicht kann ich den Link am 
Wochenende nachreichen.

von Jens (Gast)


Lesenswert?

>>Und? Hast du auch verstanden, WIE sie funktionieren?

A)hmm, im ersten Schritt habe ich z.B. den Teil der die Auswertung der 
DCF77 macht bei mir übernommen. Ich habe es nur nicht mit Interrups 
gemacht. Also musste ich das erstmal geringfügig anpassen.

Leider hatte ich dann immer noch gelegentlich eine falsche Uhrzeit im 
Display stehen. Also habe ich den Code von Peter umgeschrieben, den 
Gedankengang der Fehlerauswertung und Biterkennung jedoch beibehalten.

Entstanden ist ein neuer Code. Jedoch länger als das superkurze Teil von 
Peter, ich hatte Platz.

B)Bei den Buchstabentool von Ape war es ähnlich, dort KANN ein Buchstabe 
auch gepackt abegspeichert werden. Im ersten Schritt habe ich den Teil 
des Codes übernommen. Da mich das Thema RLE dann so interessiert hat, 
habe ich dieses Thema tiefgehend ausgeleuchtet.

Später wollte ich dann Buchstaben mit transparenten Hintergrund aus 
einer RLE entackten Datenmenge generieren, dies war nicht vorgesehen, 
also habe ich die Auswerteroutine entsprechend angepasst, das war fast 
aufwendiger als es gleich selbst zu machen, das Prinzip der RLE habe ich 
jedoch komlett anhand des Codes verstanden und für mich angepasst.

C)Naja, ich habe mir auch mal die Funktionen zum Kreisezeichnen aus 
einer GLib gezogen. Dabei ist mir aufgefallen das es unterschiedliche 
Konzepte zu geben scheint, so manch eines Zeichnet kleine Kreise runder. 
Hat etwas mit dem Runden zu tun wie sich dan rausgestellt hat, dazu 
musst ich die rauskopierten Funktionen unterscheidlicher Glibs aber auch 
untersuchen, verstehen und vergleichen....

Naja, bei dieser 3d Sache habe ich momentan auch kaum eine Vorstellung 
wie das funktioniert -> Transformation, Drehmatrix, 3d Engine, 
Matritzen... keine Ahnung, muss ich vielleicht ja erstmal auch nicht 
komplett verstehen, ich schaue mir an was "unten" raus kommt, bringe das 
in meinen Grafikspeicher. Dann schaue ich mir an was "oben" rein geht, 
und spiele damit rum. Irgendwann kommt der Moment an dem ich neue 
Objekte einbringen will, dann steige ich tiefer ein. :-)

JJ

von Jens (Gast)


Lesenswert?

>>Vielleicht kann ich den Link am Wochenende nachreichen.

das wäre sehr interessant für mich. :-)


Mal sehen was sich für Ansätze bieten. Thema Sinus und Cosinus allein 
kann denke ich schon Tage kosten, es läuft auf einem kleinen 8Bit AVR 
dann doch etwas anders ab. Aber wenn jemand die Tabellen schon passend 
für solche Darstellungen angelegt hat, würde ich sie gern verwenden. 
Wenn ich dann meinen Winkel, statt in Grad später in zehntel Grad 
angeben will, dann muss ich sie halt anpassen, dazu werde ich das 
Konzept dann beibehalten und die Tabellen vergrößern - nur mal als 
Beispiel - ich weiß ja nicht ob man diese nun an der Stelle wirklich so 
braucht - könnte es mir aber durchaus vorstellen... :-)

JJ

von Edson (Gast)


Lesenswert?

Peter II schrieb:
> Edson schrieb:
>> Für Peter II schon, der hat das alles schon vor 15 Jahren auf dem PC
>> gemacht. Also kann er das auch für nen ATMega aus dem Ärmel schütteln,
>> oder? ;)
>
> warum denn nicht, klar werde ich auch ein paar tage damit verbingen.
> Aber wenn man die Grundlagen kennt, dann verbinge ich die Zeit wirklich
> mit Programieren und Anpassend an die Bedürfnisse vom AVR und nicht mit
> der Suche im Internet nach Code den ich nicht verstehe.

Dann reich doch mal einen schönen Link oder einen Literatur-Tipp zu den 
Grundlagen hier ein.

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:

> Mal sehen was sich für Ansätze bieten. Thema Sinus und Cosinus allein
> kann denke ich schon Tage kosten,

nicht wirklich.

> es läuft auf einem kleinen 8Bit AVR
> dann doch etwas anders ab. Aber wenn jemand die Tabellen schon passend
> für solche Darstellungen angelegt hat,

die hast du dir mit Excel in 10 Minuten selbst erzeugt.

> Wenn ich dann meinen Winkel, statt in Grad später in zehntel Grad
> angeben will, dann muss ich sie halt anpassen, dazu werde ich das
> Konzept dann beibehalten und die Tabellen vergrößern - nur mal als
> Beispiel - ich weiß ja nicht ob man diese nun an der Stelle wirklich so
> braucht - könnte es mir aber durchaus vorstellen... :-)

Die Sin/Cos Funktionen sind nicht das eigentliche Problem. Die werden in 
der ganzen Geschichte nur an wenigen Stellen benötigt. Das eigentliche 
Problem ist, dass du es mit vielen Zahlen (den Ergebnissen der sin/cos 
Funktionen) zu tun hast, die sich allesamt im Bereich 0 bis 1 bewegen. 
Und die möchtest du darstellen bzw. miteinander verrechnen können, ohne 
dabei auf Floating Point zurückzugreifen. Da steckt der eigentliche 
Knackpunkt in der Implementierung (und die Behandlung der 
Fehlerfortpflanzung)

2 Matrizen

    0.5      0.86602  0.0   0.0   |  0.0939  0.0  -0.342  0.0
   -0.8662   0.5      0.0   0.0   |  0.0     1.0   0.0    0.0
    0.0      0.0      1.0   0.0   |  0.342   0.0   0.939  0.0
    0.0      0.0      0.0   1.0   |  0.0     0.0   0.0    1.0

miteinander multiplizieren können, ohne den Coprozessor zu bemühen, um 
dann eine Gesammatrix, zu erhalten mit der dann 200 Vektoren 
multiplizert werden, deren Werte nicht im Bereich 0 bis 1 liegen, 
sondern Positionen im Raum darstellen.


Das Sin/Cos 'Problem' kannst du lange Zeit ignorieren. Das ist nur das 
Tüpfelchen auf dem i und dessen Vermeidung dient dann unter anderem auch 
dazu Flash-Platz einzusparen.

Wer Vektoralgebra macht und allen Ecken und Enden die Winkelfunktionen 
benötigt, macht was falsch.

von Karl H. (kbuchegg)


Lesenswert?

Edson schrieb:
> Peter II schrieb:
>> Edson schrieb:
>>> Für Peter II schon, der hat das alles schon vor 15 Jahren auf dem PC
>>> gemacht. Also kann er das auch für nen ATMega aus dem Ärmel schütteln,
>>> oder? ;)
>>
>> warum denn nicht, klar werde ich auch ein paar tage damit verbingen.
>> Aber wenn man die Grundlagen kennt, dann verbinge ich die Zeit wirklich
>> mit Programieren und Anpassend an die Bedürfnisse vom AVR und nicht mit
>> der Suche im Internet nach Code den ich nicht verstehe.
>
> Dann reich doch mal einen schönen Link oder einen Literatur-Tipp zu den
> Grundlagen hier ein.

Na zb.
 Foley, Van Dam
 Computer Graphics, Principles and Practice

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.