Hi, Einiege von Euch haben doch sicher schon mal diese 3D Effekte auf Displays gesehen. Dort wird ein 3D Würfel in alle Richtungen gedreht. http://www.youtube.com/watch?v=OlgqC8HLBTA Ich habe keinen Ansatz wie das funktionieren kann. Momentan habe ich eine set_pixel (x,y) Funktion. Dazu habe ich mir die Grafikroutinen von damals apetech mit eingebunden, kann also Kreise, Quadrate und Linien zeichnen. Um selber eine Kreisfunktion zu schreiben müsste man sich mit dem Bresenham auseinandersetzen, musste ich nicht da ich die "c-lib" einfach nehmen konnte, die funktion Set_Pixel ausprägen, gut. Eigentlich suche ich nun soetwas für diesen Würfeleffekt, nur habe ich keine Idee wie, wo soetwas zu finden wäre. Ich programmiere einen Atmega168 in c. Das Pixeldisplay umfasst eine Größe von 16x16Pixeln. Im Speicher sind es 16x uint16_t. Dazu habe ich wie gesagt eine Funktion die einen Pixel innerhalb dieses "Grafikspeichers" setzt. Das ist zur Zeit der Stand. Ich würde mich sehr über einen Tip oder Hinweis freuen. Danke im voraus. Gruß, TS
Sorry, aber dein Thread klingt für mich so: "Hi! Ich habe eine Schraube, den ich nicht mal selber gebaut habe. Wie baue ich daraus einen Flugzeug in der Größe eines A380? Achso...... Ich habe kaum Ahnung von der Materie, also macht es bitte für mich so, dass ich es nur noch starten muss..."
...ich suche eine c-lib. 1)draw_cube (x,y,z,size) oder ähnlich (vielleicht auch winkel o.ä. angeben. 2)set_pixel ausprägen. 3)einbinden. fertig. Ich möchte mich nicht ausführlich mit 3D und 2D rechnereien auseinadersetzen, zumindest nicht zu diesem Zeitpunkt. Ich hoffe darauf dass es eine kleine lib gibt. TS
Leute mit dieser Einstellung bestätigen mir immer wieder, weshalb ich meine Bibliotheken nicht open source machen sollte. Vielen Dank dafür und viel Spass beim Suchen.
...ich dachte immer das "c" genau dafür gemacht wurde, damit man das Rad nicht immer wieder neu erfinden muss... "Vielen Dank dafür" wofür? Ich verstehe dich an der Stelle nicht, ich stelle auch meinen Code in der Codesammlung ein. Wenn jemand eine Kennlinie eines Sensors linearisiert hat dann muss das der nächste nicht noch mal umsetzen. Und meistens will man es dann doch ganz verstehen und geht da durch... Nimm doch mal Peters DCF Lib, ich meine die hat über 6000 Downloads. Ich habe sie auch genutzt. Es führte aber dazu dass ich mich letztendlich doch detailiert mit dem Thema auseinandergesetzt habe, da sie anfangs in meiner Umgebung nicht so lief, da ich ohne Interrups arbeiten wollte. Ich habe sie dann umgeschrieben... Es ist ja auch niemand dazu gezwungen seine sourcen freizugeben... TS
Suche Chronotonen für meine Zeitmaschine. Habe den Stecker für die Steckdose schon. Ich habe echt keine Zeit mich mit dem Thema Zeitmaschine auseinander zu setzen. Könnte mir jemand seine Chronotonen-c-Lib zur Verfügung stellen? Ohne Worte....
Das ist aber ein anderes Thema. Computergrafik ist ein wenig mehr als nur ein bestimmtes bitweises Protokoll aufzunehmen. Du musst dort verstehen was du tust. erst mal solltest du ein wenig Ahnung haben von * wie stelle ich überhaupt räumliche Koordinaten dar dazu sind zb Vektoren ein guter Ansatz. Mit einem 3D Vektor kann man gut 3-dimensionale Koordinaten darstellen. Wenn man sich merkt, was was ist, kann man damit auch Richtungs- vektoren darstellen. Die Verallgemeinerung zu homogenen Koordinaten macht das dann ganz von alleine (dann hat man 4-'dimensionale' Vektoren). Dafür ist es aber nicht mehr so leicht, die wesentlichen Vektoroperationen 'Skalarprodukt' und 'Kreuzprodukt' zu veranschaulichen * die nächste Zutat lautet: wie stelle man Übergänge von einem Koordinatensystem zu einem anderen dar. Solche Übergänge können sein: Rotationen, Verschiebungen, Skalierungen bzw. die Verallgemeinereung von Skalierungen, die Shear- Operationen (keine Ahnung ob es dafür einen deutschen Ausdruck gibt). Es zeigt sich, auch deshalb weil man Positionen mit Vektoren dargestellt hat, dass dafür Matrizen ein gutes Wrkzeug sind. In der Verallgemeinerung von homogenen Koorindaten, ist deren Zusammenfassung zu 4*4 Matrizen das Werkzeug der Wahl, mit dem man alle notwendigen Operationen darstellen kann. * bis jetzt hast du also 3-dimensionale Punkte und du kannst sie Manipulieren, indem du sie durch Matrizen (auch mehrere hintereinander) durchjagen kannst. Das ist super. Aber irgendwann wird es Zeit sie irgendwo abzubilden. Es muss also eine Projektion von der bisherigen 3-dimensionalen Rechenwelt in eine 2--dimensionale Bildschirmwelt her. Auch die lässt sich mittels einer Matrix darstellen. Man benötigt einen Kamerapunkt und eine Richtung in die die Kamera schaut. Weiters eine Ebene, auf die die Szenerie abgebildet werden soll. Das drückt man jetzt als Matrix aus und hat damit eine Abbildung die einen 3d-Vektor auf einer 2d-Ebene abbildet. Die Linien noch miteinander verbinden und voila: Da schwebt er der Würfel. Das heisst fast: ein bischen klein ist er noch und er klebt in einer Ecke. * Das aber lässt sich mit einer Window-Viewport Transformation hinten nach in den Griff kriegen. Sie erlaubt es einen beliebigen Ausschnitt mit Weltkoordinaten in einem anderen beliebigen Ausschnitt mit Pixelkoordinaten anzuzeigen. Bildverschiebungen, Bildvergrößerungen sind damit kein Problem mehr. * Wenn es dann da nicht das Problem gäbe, wenn man zu sehr zoomt, dann kommen plötzlich seltsame Wrap-Around Effekte ins Spiel. Ein Clipping welches die Ausgabe auf entweder die Window-Fläche oder die Viewport Fläche begrenzt muss her. Das ungefähr ist in kurzen Worten ein kurzer Abriss der Viewing-Pipeline, bzw. der Konzepte, die man benötigt, wenn man Computergrafik auf einer einfachen 3D-Ebene machen möchte. Man kann dann von da an beliebig schwieriger werden, indem man dann Konzepte wie Flächenshading, Rendering, Licht und Schatten, Texturen etc. einführt. Es gibt genug Literatur zu dem Thema, es gibt genügend Web-Siten zu dem Thema. Das ganze ist sogar nicht mal besonders schwer, wenn man mal die Ebene Vektoren und Matrizen gemeistert hat, wozu man kein Mathe-Genie sein muss. Wie die einzelnen Matrixtypen für die Operationen aussehen ist bekannt und wie man Matrizen hintereinanderschaltet (miteinander multipliziert) muss man eben üben. Eine Basis-C-Lib, mit der man das machen kann umfasst ca., ich würde mal sagen, so um die 20 bis 30 Funktionen, je nachdem was man sich als grundlegende Math-Funktionen für die Vektoren zurecht legt. Die Einzelfunktionen sind dabei sogar ziemlich kurz. ICh würde mal sagen mit so ungefähr drei bis vierhundert Lines of Code ist man dabei. Was es aber nicht gibt: Eine 'Lib' mit einer draw_cube Funktion, und um alles andere braucht man sich nicht kümmern. (*) (*) d.h. das stimmt nicht ganz. Ich glaube in der GLUT, der Utility Library zu OpenGL gibt es einen entsprechenden Call. Aber auch dort bedeutet das nicht, dass man die Viewing Pipeline nicht erst mal aufsetzen und 'in Betrieb' nehmen muss.
Hi Karl Heinz, ok, ich sehe schon. Ich habe keine Vorstellung davon wie komplex das Thema ist. Man sieht hier und da mal so einen Würfel auf einem Nokia Display, oder einem Matrix LCD usw... und liest manchmal etwas von einer Grafik Engine... etc. -> keine Idee was genau dahinter steckt - jetzt zumindest ansatzweise. Ist jetzt klar "mal eben" einbauen wie einfache Grafikfunktionen ist dann also nicht, hätte ja sein können. Mal sehen ob ich an der Stelle jetzt beginne tiefer zu "graben" :-) Gruß, TS
Thorsten S. (whitejack) schrieb: > Ist jetzt klar "mal eben" einbauen wie einfache Grafikfunktionen ist > dann also nicht, hätte ja sein können. Mal sehen ob ich an der Stelle > jetzt beginne tiefer zu "graben" :-) Solltest du unbedingt. Das Thema ist nicht so einfach wie: ich ruf da einfach mal eine Funktion auf und alles ist gut. Es ist aber auch keine Raketentechnik. In ein paar Stunden könntest du alles beisammen haben, sodass sich dein Würfel dreht (wenn dein µC mitkommt). Und eine halbe Stunde später dregt sich dann auch ein Tetraeder, Oktaeder, Dueodecaeder (mein spezieller Liebling), ein Haus, etc. Nur ein Teapot wird etwas länger dauern, da musst du erst mal durch Bezier-Splines durch :-)
kleine Application Note von Atmel zu dem Thema: AVR32134: AVR32 UC3 3D Graphic Rendering Application http://www.atmel.com/images/doc32100.pdf Gruß
Überigends kann man 3D Algorithmen und Lineare Algebra(Mathe) auch sehr schön mit Matlab üben und Lernen. Nur mal so als tip. Zumindest wenn man die Muße hat sich da ein zuarbeiten, kann man dan im PIC oder AVR "schnell mal" seine eigenen Transformationen bauen. Ein weiter Tip wenn man die Muße hat such man sich im netz ein freies Script für Computergraphic oder ne videovorlesung, dort wird meist alles im Detail erklärt. Aber das funktioniert (oft) nicht ohne fundiertes Basiswissen. hier gibts zB nen freies: http://www.medien.ifi.lmu.de/lehre/ss10/cg1/
Hi, vielen Dank für die Tips. Mit Daniel Porzig hatte ich vor Jahren mal Kontakt zu einem anderen Thema meine ich, wusste garnicht das er eine Site hat. Das es dazu eine App Note geben könnte - auf die Idee wäre ich nie gekommen, da möchte man am liebsten sofort mit loslegen. Die Vorlesung sieht auch sehr detailiert aus. Für mich steht die Entscheidung an ob ich da nun tiefer einsteige denn eigentlich hatte ich ein anderes Ziel und wollte das nur auf dem Weg "mitnehmen" wenn möglich. Ihr kennt das sicher, Ideen sind immer mehr da als Zeit um sie alle zu 100% zu realisieren - ich mache dann lieber weniger und dafür aber fertig, auch wenn Verlockungen überall "lauern". Vielen Dank für die Erklärungen und die sehr hilfreichen Tips. Gruß, TS
Thorsten S. schrieb: > 1)draw_cube (x,y,z,size) oder ähnlich (vielleicht auch winkel o.ä. > angeben. So einfach wird's nicht gehen. Alleine um Position und Orientierung im Raum zu beschreiben, brauchst du 3+2 Parameter. Außerdem mußt du noch die Perspektive festlegen. http://de.wikipedia.org/wiki/Perspektive
@Mitleser: "der is gut" - steck viel wares drin. @Karl Heinz: ich erwische mich selbst sehr oft in Ungeduld wenn wieder mal jemand eine LED Matrix bauen will und nach der Berechnung des Vorwiderstandes für eine LED fragt. Ich danke dir für deine Geduld und das immer vorhandene Einfühlungsvermögen zur Ursache solcher Fragestellungen. An der Stelle habe ich mich, zu meinem Bedauern, voll vergriffen mit der Einschätzung der Komplexität wie ich auch bereits erwähnt habe. Gruß, TS PS.: @ Werner: 3D Darstellung ist ein sehr interessantes Thema. Ich habe vor Jahren viel in der Zwei-Fluchpunktperspektive und der Isometrischen Darstellung gezeichnet. Als dann die Farge aufkam wie ich real existierende Maße, wenn ich z.B. eine Kühe gezeichnet habe, in die Ein-Fluchtpunktperspektive transformiere waren immer alle überfragt - da gabs aber auch noch kein ausgereiftes Internet und ich war erst 14 Jahre.
Wenn du den Würfel nur drehen willst, dann nimm doch fertige Bilder und gebe diese aus.
@Xaero80C51 danke, das sieht ja noch einigermaßen übersichtlich aus. @Ingo das wäre zu "einfach", wenn dann richtig :-) TS
Das wäre eine Gelegenheit alte Pseudo-3D Geschichten wieder herauszukramen.. Eine von vielen Möglichkeiten: -Diskreter Satz an gegebenen Perspektiven -Für jede diskrete Perspektive gibt es eine Funktion: ScreenPt = Pt3DToScreen( x,y,z) Bei geschickter Wahl der Perspektiven und isometrischer Darstellung kommt man in der Funktion Pt3DToScreen(..) mit Multiplikationen und Shift-Operationen aus. ..und ja: eine Linie per Bresenham-Algorithmus zu "verpixeln" sollte ertse Wahl sein. Und wie Ingo schrieb: Wenn es kompliziertere Strukturen sind, gib vorgefertigte Bilder aus. Solltest Du aber eine OpenGl-Implementation für 'nen 8-Bit AVR finden, die nur wenige k Speicher benötigt, lass es uns wissen.
Hi, habe mich eben mal ran gesetzt und einfach nur mal ein Quadrat und ein paar Striche gezeichnet - mal abchecken ob es sich lohnen würde da was mit "Gehalt" zu implementieren... Mal sehen. TS.
Michael schrieb: > Leute mit dieser Einstellung bestätigen mir immer wieder, weshalb ich > meine Bibliotheken nicht open source machen sollte. Vielen Dank dafür > und viel Spass beim Suchen. Deine Lehrer/Dozenten, große Mathematiker und Philosophen hatten glücklicherweise eine andere Einstellung zu diesem Thema. Sonst wären wir immer noch im Mittelalter und die Alchimisten würden sich weiterhin gegenseitg eifersüchtig belauern und ausspionieren ob nicht jemand eine Formel zur Produktion von Gold gefunden hat und ab und an mal eine Hexe verbrennen. Wissen vermehrt sich dadurch, dass es weitergegeben wird und Kultur lebt davon, dass man auf die Arbeit/Ideen eines Vorgängers aufsetzt bzw. diese weitertreibt und etwas neues darauf schafft. Wenn jeder erst mal einen Compiler nebst C-Library schreiben würde bevor er sein eigentliches Programm schreibt, dann wird er nie fertig.
Karl schrieb: > Alchimisten trotzdem Alchemisten > ob nicht jemand eine > Formel zur Produktion von Gold gefunden hat naja, wäre das nicht so, hätten wir vermal nicht mal Porzellan :-)
Für jede Ecke deines Würfels setzt Du einen 3D-Vektor. Nun benötigst Du eine Funktion, mit der Du den 3D-Vektor in eine Raumkoordinate überführst. (Also sin und cos) X und Y sind die Koordinaten auf dem Bildschirm, Z kann zur Skalierung benutzt werden (hinten klein, vorne groß) Um den Würfel zu drehen, mußt Du alle Vektoren in die selbe Richtung drehen. Dann kannst Du eine neue Ausgabe berechnen und ausgeben. Wenn man die trigonomischen Funktionen durchschaut hat, sollte das eigentlich kein Problem darstellen. Das habe ich mit 15 schon auf dem Amiga gemacht. :-) Gruß Jobst
Tier schrieb: > Karl schrieb: >> Alchimisten > trotzdem Alchemisten Nein, die Schreibweise mit zwei i ist nicht nur verbreitet, sondern auch zulässig.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.