Hallo
Wie bereits angedroht, habe ich mal versucht ein Einsteigertutorial zum Thema Terrain Rendering zu schreiben. Und hier haben wir jetzt das Resultat. Da ich mich selber erst seit kurzer Zeit mit Managed DirectX und Terrain Rendering befasse, ist der Code sicher noch nicht ganz so ausgereift, wie er sein sollte. Deshalb möchte ich an dieser Stelle auch die etwas erfahrerenen Programmierer unter euch dazu aufrufen, doch mal einen Blick darauf zu werfen und mich zu korrigieren, wenn ihr Verbesserungsvorschläge habt. Aber auch alle anderen unter euch sind herzlich dazu eingeladen, mitzuhelfen, dieses Tutorial zu verbessern. Einfach per E-Mail oder direkt ins Forum.
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Und hier kommt gleich auch noch Teil II. So, jetzt wird es sicher wieder etwas länger dauern, bis der nächste Teil kommt. Ich muss mir zuerst selber wieder was beibringen 🙂
PS: Es ist nicht verboten, das jemand, der eine gute Idee hat, an dem Tutorial weiterschreibt.
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Nicht schlecht Dein Tutorial, zwar behandelt es bisher nur Basics, aber Layout, Stil und Inhalt sind echt klasse. Hoffentlich machst Du noch weiter...
Gruß
Condor
Cool. Da ich mich auch bald damit beschäftigen muss / will (wenn ich erstmal Skinned-Meshs vernünftig am Laufen habe), kommt mir das sehr gelegen. 😉 Sieht auch schonmal nicht schlecht aus.
Danke. Ich hatte eigentlich vor weiterzumachen, wenn wirklich Interesse vorhanden ist. Allerdings machen mir die Quadtrees im Moment etwas zu schaffen, d.h. es dauert wahrscheinlich noch ein paar Tage bis zum dritten Teil. Wenn jemand gute Links zu dem Thema kennt, soll er sie doch bitte hier posten.
Und wenn ich schon mal dabei bin: Hat jemand eine gute Idee, wie man einen Framecounter integriert? Ich habe schon versucht, diesen mit einem Timer zu realisieren, aber den will das Programm nicht schlucken, bzw. das Tick-Event feuert nicht???
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hallo
Sieht schonmal sehr gut aus das ganze. Weiter so 🙂
Wegen nem Framecounter kann ich dir vielleicht weiterhelfen, hatte sowas schonmal drin bei einem Testproggie von mir, muss mal suchen ob ich das Progg noch habe. Musste inzwischen mal formatieren, deswegen weiß ich nicht ob ichs noch habe 😁
Eventuell hilft dir auch dieser Thread weiter, so ähnlich hatte ich es auch realisiert:
Einige Fragen
so wie ich das sehe ist dein Problem wenn der Timer nicht feuert das das er nicht inizirt ist (jedenfals war das heute so bei mir als ich das Gleie Problem hate) 😁
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Was meinst du damit?
...das der Timer nicht inizirt ist...
Ich habe den Timer erstellt, den EventHandler angemeldet, Timer.Enabled = true und Timer.Start(). Manche von euch werden jetzt sicher denken: Der hat den EventHandler nicht richtig angemeldet, der Depp 🙂. Aber dazu kann ich nur sagen: Auch wenns der Form-Designer erstellt, funktionierts nicht! Keine Ahnung, obs da irgendeinen Konflikt mit DirectX gibt. Wenn ich das Ganze 1:1 in einer normalen Windows-Anwendung programmiere, funktionierts tadellos.
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Wie gesagt hatte ich das gleiche Problem und habe es gelöst indem ich den vom Form-Designer erzeugen Code auch aufgerufen habe wenn dieser im Konstrucktor nämlich nicht ausgeführt wird wird ein Event auch nicht ausgelöst
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Hallo zusammen
Teil III ist da. Themen sind Texturing und Skybox. Zusätzlich zur PDF-Datei findet ihr im Anhang auch das Programm ProTEX. Ich denke, aus dem Tutorial sollte die Funktion und Bedienung des Programms eigentlich hervorgehen. Sonst einfach E-Mail oder direkt ins Forum.
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
... und hier noch die Projektmappe (passte leider nicht in die 200kB). Ausserdem musste ich die .exe und die Procedural Texture rausstreichen. Aber die .exe wird ja beim Compilieren des Projekts aus der Projektmappe automatisch wieder erstellt und die Procedural Texture könnt ihr mithilfe von ProTEX selber erstellen (die dafür erforderlichen Texturen sind im Debug-Ordner gespeichert).
Wer selber Skybox-Texturen erstellen möchte, macht dies am besten mit Terragen https://193.5.168.9/servlet/webacc?merge=linkurl&Url.linkText=http%3a%2f%2fwww%2eplanetside%2eco%2euk%2fterragen%2f.
Tutorials dazu findet man mit Google zuhauf.
Alle anderen laden die Skyboxen von https://193.5.168.9/servlet/webacc?merge=linkurl&Url.linkText=http%3a%2f%2fwww%2escentednectar%2ecom%2fskyboxes%2f herunter. Viel Spass
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hier http://www.vb3d.com/Textures.html gibt es einige gute Texturarchive zum herunterladen (z.T. 512x512).
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hallo zusammen
Das Terrain Rendering Tutorial sieht ja schonmal ganz gut aus!
Allerdings würde ich viele Dinge anders machen.
Ein Framecounter lässt sich z.B. viel einfacher so realisieren als mit einem Timer:
private int FPSCount;
private int LastFPSCheck;
private void refreshFPS()
{
if (LastFPSCheck+1000 < Environment.TickCount)
{
this.Text = FPSCount.ToString() + " fps"; //Ausgabe in der Titelleiste
FPSCount =0;
LastFPSCheck = Environment.TickCount;
}
FPSCount++;
}
Ich arbeite gerade selber an einem Projekt um Landschaften zu rendern.
Im Anhang ist ein Bild von dem jetztigen Stand. Die Performance lässt leider noch etwas zu wünschen übrig, aber daran arbeite ich gerade.
mfg Lenne 😁
Hallo,
Ich würde gerne große Landschaften unter Wasser darstellen.
Hat da wer eine Idee?
MFG
Hallo
Danke für den Framecounter-Code, daran habe ich gar nicht gedacht, ist wirklich das Einfachste. Und ich kann's nur noch mal wiederholen: Wenn jemand Verbesserungs- und / oder Erweiterungsvorschläge hat, soll er die bitte hier veröffentlichen.
@Lenne: So wie dein Terrain aussieht, gehe ich mal davon aus, dass du noch den einen oder anderen Tipp auf Lager hast. Ist schon ein Algorithmus zur Geschwindigkeitsoptimierung der Triangulation (Quadtree, Geomipmapping o.ä.) eingebaut? Würde mich brennend interessieren... 🙂
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Zu den Unterwasserlandschaften: Würde ich persönlich grundsätzlich gleich machen wie bei Überwasserlandschaften. Da man allerdings unter Wasser nicht so weit sieht, könntest du z.B. bläulichen Nebel verwenden. Oder du zeichnest eine fast transparente Textur vor die Kamera, welche die ganze Landschaft etwas verschwommen wirken lässt. Diese könntest du dann auch animieren (Luftblasen etc.). Ich weiss schon, ist nicht sehr konkret, aber vielleicht bringts dich selber noch auf eine Idee.
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hallo
Am Geomipmapping arbeite ich gerade.
Um die Landschaft realistischer aussehen zu lassen musst du zum einen deine Landschaft texturieren und zum anderen Licht verwenden. Dafür eignet sich am besten der Lichttyp "directional" als Sonnelicht und ein ambientes Licht, welches selbstverständlich dunkler als das Sonnenlicht sein muss. Des weiteren muss man die Normalvektoren der Vertices berechnen. Durch das Licht entsteht so eine gewisse Plastizität der Landschaft.
Um die Performance zu verbessern habe ich noch den "PrimitiveType" "TriangleStrip" verwendet anstatt "TriangleList".
mfg Lenne
Hallo,
Könntest du mir den Code mal zeigen? =) Bitte 🙂
Wie groß könne die Landschaften werden?
MFG
Hallo
Hier ist der Quellcode!
Allerdings fehlt eine Heightmap und eine Colormap in dem Ordner terrain1 ohne die das Programm nicht läuft. Mit denen wäre die ZIP-File zu groß geworden.
Im Moment lassen sich nochnicht so große Landschaften machen, da noch keine Quadtrees oder Geomipmapping eingebaut ist.
Lenne
Hier noch eine kleine Heightmap!
Und eine Colormap, welche aber nicht besonders detailiert ist!
So, hier wäre noch der vierte Teil des Tutorials. Ich werde die nächsten acht Wochen im Dienst für Volk und Vaterland verbringen, deshalb wird es mir in dieser Zeit nicht möglich sein, an dem Tutorial weiter zu schreiben. Danach werde ich selbstverständlich weitermachen, wenn dies erwünscht ist.
Zum aktuellen Teil: Wie schon ProTEX ist LighTEX sicher noch nicht ganz ausgereift (habe die Zeit zum Testen einfach noch nicht gefunden), deshalb Fehler unbedingt melden. Die Projektmappe ist dieselbe wie in Teil III, also werde ich diese nicht nochmal uploaden.
Kleiner Tip zum erweitern der Anwendung in der Tutorialfreien Zeit:
Hier Multitexturing (Textur Koordinaten) findet ihr eine Anleitung dazu, einem Vertex mehrere Texturkoordinaten zuzuweisen. Da ganze könnte dann so integriert werden:
Wenn man die Lightmap auf diese Weise integriert, sollte man sie auch separat abspeichern und nicht vorher schon mit der Procedural Map kombinieren. Das wäre nicht der Sinn von mehreren Texturschichten.
Die Texturkoordinaten der Detailstruktur sollten so gewählt werden, dass die Textur immer nur auf eines der Quadrate (Zwei Dreiecke) aufgetragen wird (Textur kacheln). Somit reicht eine kleine Textur um eine sehr detaillierte Landschaft zu simulieren. Ausserdem kann man dann ohne grosse Qualitätseinbussen auch die Auflösung der Procedural Map noch reduzieren.
Und nun viel Spass beim Ausprobieren und bis in acht Wochen
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hi hab mal ne frage wo bekommt ihr denn die Heightmaps her macht ihr die selber oder gibts da ein programm oder ne website?
Warte auf antwort Dark Matter
Hallo,
habt ihr den beispiele wo Geomipmapping in c# implementiert wurde?
MF
Ich habe mir mal deine Beispielprogramme angesehen und habe mir die Frage gestellt ob es mit Hilfe deines Tutorials möglich ist größe Dinge zu machen.Ich meine damit zB eine Strasse in 3D.
Ich habe ein Bild in dem in der Mitte die Strasse ist und rechts bzw. links Häuser sind.Ich könnte das Bild doch mit Hilfe von DirectX in 3D darstellen so das man denke man wäre in einer Strasse.Sowas ist doch mit deinem Thema auch gemeint?!
Ich hoffe du verstehst was ich meine 🤔
Also wenn du nur ein Bild und sonst nichts hast dann hast du ein Problem. Den du weist ja nicht wie groß z.B ein Haus ist. Wenn du aber irgendeine Größe aus dem Bild kennst kannst du die Größe der anderen Objekte bestimmen wenn du diese dann hast kannst du die Strasse aus Polygonen zusammenbauen und die Grafik Alls Textur drauflegen. Bevor du jetzt aber denkst das das einfach ist vergiss es. Denn: das ausrechen der Größen der einzelnen Objekt nimmt dir keiner ab und das zuschneiden und entsprechende verzerren zu einer passenden Textur ist auch nicht ohne
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Nein leider nicht aber das ausrechen der längen ist normale schul Mathe.
Aber bevor du anfängst will ich eins vorweg schicken. Ich glaub die UNI Zürich war’s haben ein Fahrt durch eine Straße mit einem Fahrrad simuliert um die Strasse immerhin halbwegs realistisch hinzubekommen haben die wenn ich mich nicht irre ein Halbes Jahr gebraucht
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Hallo alf468,
zum Thema 3D-Stadtmodelle gab es gerade einen interessanten Artikel in der c't:
- Dr. Claus Brenner, Dr. Thomas H. Kolbe (dwi)
Neue Perspektiven
Wie 3D-Stadtmodelle erstellt und verwendet werden
Report,3D-Stadtmodelle,Stadtplanung, GIS, 3D Modelle, Geografische Information, Tachymeter, Laserscanner, Photogrammetrie, Level of Detail, LOD, Architektur
c't 15/05, Seite 106
Was da beschrienen wird, ist allerdings nichts für Hobbyisten.
Wenn du nur ganz wenige Nachbarhäuser machen willst, kriegst du das vielleicht noch hin. Allerdings brauchst du für die Texturen dann Frontalfotos von den Häusern, denn diese werden ja flach auf die Polygone "geklebt". Die räumliche Tiefe (quasi die Fluchtpunktperspektive, die jetzt auf dem Foto ist) wird dann ja gerade erst von DirectX errechnet.
herbivore
Es würde mir ja reichen wenn die Häuser einfach nur hochgeklappt werden.
Man sieht dann nacher halt nur die Frontansicht mehr will ich ja gar nicht.
Hallo alf468,
ich verstehe leider nicht, was du meinst. Kannst du das vielleicht nochmal etwas genauer schreiben? Insbesondere macht man doch ein 3D-Modell, damit man nachher mehr als eine Ansichten betrachten kann.
herbivore
Ich habe eben mit Paint was gezeichnet (also nicht lachen )
Edit gfoidl, 04.11.2022: das Bild gibt es nicht mehr, daher sind auch in [Hinweis] Wie poste ich richtig? externe Filehoster ausgeschlossen.
Das ist normale Bild von der Strasse 😁 . Wenn man nun auf der Strasse steht so sollen die Häuser nicht flach da liegen sondern sie sollen stehen.Also wie ein richtiges Haus.
Ich hoffe ihr versteht mich jetzt X(
Hallo alf468,
dein Bild ist schon ok! Aber du hast doch niemals sowas als Foto. Außerdem würde man ja nicht eine ganze Häuserreihe "hochklappen", sondern jedes Haus wäre vermutlich ein Polygon-Objekt, das man mit "seiner" textur "bekleben" muss.
herbivore
Aber ich möchte es so machen 😉
Ich will einfach nur mal was testen und dazu reicht es die ganze Häuserreihe hochzuklappen
Hallo alf468,
ok, wenn die Häuser eine einheitliche Baufluchtlinie einhalten und einigermaßen gleich hoch sind, mag das vielleicht gehen.
Ich habe ein Bild in dem in der Mitte die Strasse ist und rechts bzw. links Häuser sind.
Das stelle ich mir aber nicht so vor, wie du gezeichnet hast. Ich würde mir das so vorstellen:
Und so ein Bild ist wie gesagt nicht geeignet, weil es die perspektivischen Verzerrungen schon enthält (die Häuser werden nach hinten hin kleiner, Unter- und Oberkante laufen nicht parallel). Wenn du nun aber eine Straßenseite frontal fotografierst (tendentiell mit Weitwinkel, um überhaupt was drauf zu bekommen, hast du wieder Verzerrungen (das Haus in der Mitte ist am größten und die Häuser werden zu den Rändern kleiner). Daher denke ich eigentlich weiterhin, dass man maximal ein Haus auf ein Foto bekommt, so dass die Verzerrungen noch vertretbar bzw. korrigierbar bleiben. So in etwa:
HTH
herbivore
Hallo alf468,
sorry, ich kenn nur ein bisschen die theoretischen Grundlagen von 3d-Modellen. Praktische Erfahrung mit DirectX habe ich keine. Aber ich denke, dass das gerade in dem Tutorial stehen müsste. Du musst ja "nur" die praktische Umsetzung für meine theoretische Beschreibung finden. Wenn das nicht hilft, müssen andere ran.
herbivore
Hallo!
In dem Thread stehen paar Zeilen Code, die man gut verwenden kann um Heightmaps zu erzeugen, für das Tutorial.
Scharz/Weiss Bitmap
lg Ifoko
Kleiner Tipp: Mein Tutorialprogramm verwendet nur die Rot-Anteile der Heightmap für das Terrain. Was du mit den Blau- und Grün-Anteilen anstellst, ist dir überlassen. Damit lassen sich sehr viel mehr Informationen in einer Heightmap unterbringen (die Erstellung einer solchen Heightmap wird allerdings auch schwieriger) und es lassen sich zum Beispiel Höhlen realisieren. In deinem Fall könntest du den Blau-Anteil zur Bestimmung der Art des Hauses (Blockhaus, Villa etc.) und den Grün-Anteil zur Ausrichtung des Hauses verwenden.
mfg Hitman
PS: Das GeoMipMap-Tutorial ist in Arbeit. Dauert noch ein paar Tage 🙂
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hier kommt nach langer Zeit Teil V des Tutorials. Im Anhang befindet sich dieses Mal nur die pdf-Datei, die Projektmappe folgt mit Teil VI, welcher in Kürze fertiggestellt wird
mfg Hitman
Nachtrag: Es ist kein Geheimnis, dass die Texturkoordinaten zwischen 0 und 1 liegen, unabhängig von der Textur. Was aber vielleicht nicht alle wissen: Die Texturkoordinaten können auch grösser als 1 werden, dann wird die entsprechende Textur einfach gekachelt. So wird dies auch in meinem Programm mit der Strukturmap gehandhabt. Wir können also eine viel tiefer aufgelöste Textur verwenden als die Proceduralmap, um eben dieser eine Detailstruktur zu verpassen (Diese muss allerdings kachelbar sein, da sich sonst unschöne Kanten ergeben --> Terragen)
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Nun kommen wir zur Königsdisziplin: Teil VI Geomipmapping
Leider wird das Projekt langsam zu gross, um in die 200 KByte Upload zu passen. Also habe ich nur die zwei veränderten .cs-Files angehängt. Heightmap, Proceduralmap, Lightmap und Structurmap müsst ihr euch selber erstellen. Wenn's wider erwarten nicht funktioniert, schreibt mir ein Mail, dann schicke ich euch die benötigten Files.
Im nächsten Teil werden wir uns dann einen Heightmap - Generator programmieren, damit das lästige "Heightmap mit Google suchen" endlich ein Ende hat 🙂
mfg Hitman
Nachtrag: Das Tutorial wurde noch mal leicht überarbeitet. Die Triangulation der Stufen 0 und 3 wurden angepasst, ebenfalls einige Stilfehler korrigiert. Die aktuallisierten .cs Dateien und das .pdf findet ihr im Anhang. Ausserdem habe ich noch eine Aktuallisierung vorgenommen, welche nicht im Tutorial zu finden ist: Das Programm rendert jetzt alles mit Cull.Clockwise. Da heisst, wie müssen in der CreateIndices-Methode in der for-Schleife den zweiten und dritten sowie den fünften und sechsten Eintrag tauschen. Anschliessend noch die beiden Cullmode-Aufrufe in der DrawSkybox-Methode entfernen, dann sollte es funktionieren.
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hier noch das Original Paper zu GeoMipMapping
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Respekt wieviel arbeit Du Dir machst.
Wenn ich mal anfange mich für 3D Programmierung zu interessieren, dann wird das hier wohl einer meiner Anlaufpunkte sein.
Grüße Christoph
Danke für das Lob. Ich versuche hier nur denjenigen, welche sich für das Thema interessieren den Einstieg zu erleichtern. Ich weiss aus eigener Erfahrung, wie schwierig das ist.
Hier noch eine gute Site für diejenigen unter euch, welche des Englischen mächtig sind: www.vterrain.org
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Hallo
Hier ein Tutorial, welches sich mit der Erstellung von Heightmaps befasst. Ich hoffe, damit ist Dark Matter, und allen anderen, die nicht wissen, woher die Heightmaps nehmen, geholfen.
Die englischsprachigen Seiten, welche ich als Informationsquelle benutzt habe findet ihr hier:
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Und hier auch gleich noch das im Tutorial angekündigte Programm. Fehler und/oder Erweiterungsvorschläge unbedingt posten. Ich habe bis jetzt die Zeit für eine umgehende Fehleranalyse noch nicht gefunden 🙂
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
Meine Grafikkarte unterstützt kein HardwareVertexProcessing. Immer wenn ich die Anwendung gestartet habe ist sie abgestürzt. Dann habe ich Von Hardware auf Software umgestellt, aber jetzt wird kein Gelände angezeigt.
Was kann ich tun?
::So long, Nekromanter
Hallo
Leider musste ich feststellen, dass die GeoMipMaps nicht auf jedem System schneller laufen. Während ich beim System, auf welchem ich die ganze Geschichte programmiere rund 10 FPS herausholen konnte, lief das Programm auf einem anderen Rechner sogar langsamer. Also habe ich zuerst einmal die TerrainBlock Klasse in eine TerrainBlock-Struktur umgewandelt. Da die Indexbuffer ja in jedem TerrainBlock diesselben sind, brauchen wir diesen nur einmal zu speichern, was enorm Speicherplatz spart. Ausserdem brauchen auch die Klassen-Instanzen zuviel Platz. Zudem lassen sich die Nebenbereiche viel schneller im TriangleStrip rendern. Da aber auch diese Optimierungen nur eine relativ bescheidene Ausbeute ca. 5 FPS ergaben, bin ich ein bisschen ratlos. Obwohl wir fast 20mal weniger Dreiecke rendern, läuft das Programm nicht schneller! Jetzt meine Frage: Wie siehts bei euch aus? Wieviele FPS bringt das GeoMipMapping? Wenn's nämlich bei den meisten von euch so langsam läuft, befindet sich ein grundlegender Überlegungsfehler im Tutorial, den es zu korrigieren gilt.
@ Necromanter: Bin nicht ganz sicher, woran das liegen könnte. Werde das Problem mal unter die Lupe nehmen.
mfg Hitman
Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!
so jetzt habe ich endlich mal urlaub und werde mich mal vorsichtig an dein tutorial heranwagen. ich bin schon gespannt was mich erwartet. zu deiner engine:
interesse meinerseits besteht schon, allerdings bin ich noch auf recht wackeligen beinen was das programmieren angeht. ich werde mir wie gesagt erstmal dein tutorial ansehen und sehen wie es bei mir wirkt und wie ich mich in diesen bereich einarbeite. wenn das bei mir gut läuft werde ich mich mal bei dir melden per pm oder so, vorausgesetzt dein angebot mit der engine steht noch 🙂
mfg
Afr0
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]