Registriert: Sa Apr 09, 2011 20:48 Beiträge: 43
Programmiersprache: Delphi
Hallo Leute,
nach längerer Zeit hab ich mich mal wieder drangesetzt und habe es tatsächlich geschaft einen kleinen 3D-Editor zu basteln. Mein Problem ist nur: die Texturen die ich lade werden Spiegelverkehrt dargestellt. Ich hab mir eine Textur erstellt bei der die Ecken nummeriert sind. Laut Wiki und anderen Tutorials ist die "natürliche" Reihenfolge für die Ecken einer Textur folgende:
4---3 1---2
wobei 1=Links Unten 2=Rechts Unten 3=Rechts Oben 4=Links Oben
Allerdings werden meine Texturen falsch herum dargestellt. Sie sind sowohl vertikal als auch horizontal gespiegelt. Ich lade übrigens eine Bmp. Ist das normal? Wie kann ich die Textur flippen, bevor ich diese platziere? Oder mach ich irgendwas falsch? Ich erstelle die Faces meiner Quads auch in dieser Reihenfolge. Sowohl die Eckpunkte als auch die Texturemapping-Ecken. Immer LU->RU->RO->LO
Es kommt vllt auf den Loader an wo bei den Texturen der Ursprung ist. Für OpenGL fängt eine Textur unten links an. Bei Windows ist der Koordinaten Ursprung aber meistens oben links. Möglicherweise wird das beim Laden deshalb konvertiert (oder auch nicht).
Schreib mal welche Texturkoordinaten du für die einzelnen Ecken verwendest.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wo steht denn, dass eine Textur ihren Ursprung immer unten Links haben muss? Ich persönlich denkedas hat eher geschichtlichen Hintergrund der in Wirklichkeit falsch ist aber die Jahre überdauert hat und mittlerweile als einzige wahre Wahrheit gehandelt wird. Das bitte mir einem Zwinkern betrachten. Richtig falsch gibt es in dem Fall nicht. Der Grafikkarte ist das in den meisten Fällen sogar ziemlich egal wie rum die Textur ist. In einigen Fällen (Cubemaps) ist es allerdings so, dass die Textur explizit TopDown sein MUSS.
Bei BMPs ist es so, dass die erste Zeile des Bildes als letztes in die Datei geschrieben wird. Sie stehen also von Hause aus auf dem Kopf. Wenn man sie also am Block einließt und nach OpenGL übergibt ist die Koordinate (0,0) Unten Links. Wobei 0,0 aber eigentlich Oben Links ist nur da die Textur im Speicher auf dem Kopf steht wird dann wieder unten links raus. Da gibt es jetzt 2 Möglichkeiten. Wie von den anderen erwähnt. Entweder die Koordinaten passen nicht zu dem wie sie sein müssen um die Textur so darzustellen wie sie soll oder die Bilddaten passen nicht dazu wie die Ansicht konzipiert wurde. Und das kann dann eigentlich nur der Loader sein. Und der einzige mir bekannte Loader der so was macht ist die glBitmap. Da werden die Texturen immer TopDown abgelegt. Hat aber eine Methode zum Flippen (FlipVert).
Registriert: Mi Jul 15, 2009 20:48 Beiträge: 111 Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
ich würd auf jedenfall empfehlen sie nicht einfach nochma umzudrehn, auch wenn das leichter wäre, sondern nach nem echten fix suchen, sonst hast du später evtl probleme die nichtmehr so leicht zu lösen sind. so von anfänger zu anfänger^^
_________________ thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das stumpf zu machen sollte auch nicht mein Rat gewesen sein (ist es nie). Sondern BionicWave muss sich erst mal das Problem genau anschauen und den Grund finden warum sie auf dem Kopf steht. Dafür wurden in dem Thema einige Ansätze gesagt bzw. Nachfragen gestellt.
Wenn der 3D Editor aber externe Formate lesen oder schreiben können soll, dann hat man auch nicht diese Flexibilität sagen zu können "ich mache das jetzt wie ich will". Sondern dann muss es so sein wie es das Format erwartet. In 3D Editoren ist es aber (glaube ich) immer so, dass die Texturen auf dem Kopf stehen. Bzw die Koordinaten entsprechend so sind. Falls er also die glBitmap benutzt wird es nicht viele Alternativen geben als sie zu drehen. Natürlich erst nachdem das Problem anständig analysiert wurde. Alles Andere wird sich auf kurz oder lang rächen.
"Backfaceculling" ist deaktiviert (standardmässig) und du schaust dir die Fläche von der Rückseite an. Da entsteht optisch der Eindruck das die Textur verkehrt herum ist.
Registriert: Sa Apr 09, 2011 20:48 Beiträge: 43
Programmiersprache: Delphi
Ich denke ich habs jetzt. Die Textur war richtig rum. Die Angaben zu den Abmessungen einzelner Teile der Texture waren wohl falsch. Ich hab bei den Texturpositionsangaben bei der Y-Achse von oben nach unten gerechnet. Nachdem ich das umgedreht habe klappt alles wie es soll. Manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
@Lossy: Jo. Stumpf machen kam für mich auch nicht in Frage. Hab ständig den ganzen Quellcode durchforstet, aber das offensichtliche einfach nicht gesehen. So ein Mist.
Übrigens noch mal vielen Dank für die vielen Tipps die ich hier mittlerweile schon erhalten habe. Ich hatte ja vor ein paar Monaten zum ersten mal Kontakt zu OpenGL. Hab dann aber aufgehört, als ich mit meinem Projekt zu viele Probleme hatte. Nach einiger Zeit hätte ich bei einem anderen Projekt einen einfachen 3D-Viewer gebrauchen können. Also hab ich noch mal bei Null angefangen... und plötzlich waren die Probleme die ich hatte wie weggeblasen. Alles hat auf Anhieb so funktioniert wie ich es mir vorgestellt hatte. Kaum zu glauben was so eine längere Pause bewirken kann. Jetzt funktioniert auch Translation und Rotation.
Das beste war aber folgendes: Ich hatte mir eine Klasse zur Erstellung von einfachen Modellen geschrieben. Dazu habe ich mir 2 Tage lang den Kopf zerbrochen wie man einfache Boxen und deren Faces am besten und effektivsten erstellt und rendert. Schliesslich habe ich den Entwurf umgesetzt. Funktionierte wunderbar.
Dann, ein paar Tage danach, konnte ich einen Blick auf den Quellcode der Modelerstellung bei Minecraft nehmen. Kaum zu glauben, aber Notch benutzt tatsächlich fast exakt den gleichen Aufbau den ich mir ganz allein überlegt hatte. Das hat mich echt umgehauen.
Das heisst für mich ich hab viel dazu gelernt und stehe doch nur am Rande des Anfangs. Also von ganzem Herzen: Danke an die OpenGL-Community.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das wird dir nebenbei immer wieder passieren. Ist ein nettes Gefühl, wenn man merkt, dass man anscheinend doch nicht ganz doof ist und Probleme mindestens ähnlich wie andere löst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.