In einem gewissen Bereich (wirkt als wäre es ein Dreieck mit einem Punkt im Koordinatenursprung und den anderen beiden unten links und unten rechts am Fensterrand) verschiebt sich die Textur auf eines Planeten meines kleinen Sonnensystems - der Screenshot zeigt was ich meine. Mehr als etwas Code geben kann ich wohl Euch leider wohl nicht, ich habe absolut keine Ahnung woran das liegen könnte. Die folgenden Zeilen sind ein Ausschnitt der Render-Prozedur. Das gluLookAt steht in der Render-Prozedur, da ich später darüber auch noch die Mouselook-Funktion implementieren will, ansonsten stünde es natürlich in der Initialisierungsprozedur.
procedure TSolar.DrawSphere(AngleX, Radius : Real; Position : pVec3f; TexID : Byte); var Sphere : pGLUQuadricObj; begin // Verschieben, Rotieren glPushMatrix; glTranslatef(Position[0], Position[1], Position[2]); glRotatef(AngleX, 0.0, 0.0, 1.0); // Textur setzen Sphere := gluNewQuadric; gluQuadricOrientation(Sphere, GLU_OUTSIDE); gluQuadricNormals(Sphere, GLU_SMOOTH); gluQuadricTexture(Sphere, True); if TexID > 0 then begin glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, TexID); end; // Kugel erstellen gluSphere(Sphere, Radius, 20, 20); gluDeleteQuadric(Sphere); if glIsEnabled(GL_TEXTURE_2D) then glDisable(GL_TEXTURE_2D); glPopMatrix; end;
Ich weiß nur so viel, dass es vorher als ich noch mit glTranslate und glRotate rumgefummelt habe, diesen Fehler nicht gab. Aber es ist mit gluLookAt wirklich kürzer und einfacher finde ich. Ich habe den Screenshot aufgrund der Dateigröße extra klein gemacht, daher hier ein paar Worte: Links sieht man wie sich der Jupiter in dem oben kurz geschilderten Dreieck befindet. Rechts davon ist er außerhalb des Dreiecks. Die Texturen sind unterschiedlich und das ist das Problem.
Gruß, Nils
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Probier mal was aus... Zeichne mal die Koordinatenachsen ins Zentrum des Planeten so dass die aus dem Planten rausragen und schau dir mal an wie das aussieht. Eventuell macht der Planet mal einen Sprung.
Das könnte was so eine Rotationsanomalie sein. Das Passiert gern mal, wenn eine Achse genau 0 ist. Kannst gerade nicht genauer erklären.
Ich denke nicht, dass es was mit der Textur zu tun hat. Falls die Achsen sich nicht bewegen, dann hast du vielleicht bei einem PopMatrix bzw einem gluLookAt Aufruf die Texturmatrix aktiv und nicht die Modelview Matrix.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Dies habe ich in die oben gezeigte DrawSphere, hinter das glRotate, gesetzt. Angenommen das stimmt, lässt sich beobachten, dass sich die Textur ändert, sobald die Y-Achse des Planten Richtung Sonne zeigt - quasi von ihr angeleuchtet wird (sie ist dann auch heller, sieht man deutlich) <-- die eine Achsenseite, denn an einem Punkt um die Sonne zeigt die Y-Achse wieder zur Sonne hin, doch mit der anderen Seite, also die Achse um 180° gedreht - um 180° gedreht stimmt die Textur dann wieder. Liegt die Y-Achse nicht im Lichtkegel der Sonne, ist die Textur wie sie sein soll. Das sieht für mich nach einem klaren System aus - natürlich nur wenn man annimmt dass die Achsen so wie ich sie zeichne korrekt sind, aber sie sehen korrekt aus und auch von der Logik her müsste das passen, aber ich bin müde und habe aufgrund von Zeitmangel einige Zeit nichts mehr mit OpenGL gemacht und arbeite mich daher zur Zeit erst wieder ein. Einen Sprung macht der Planet scheinbar nicht, da konnte ich jedenfalls nichts sehen von den Achsen her. Könnte da die Lichtquelle eine Rolle spielen ? Was genau meinst Du mit Rotationsanomalie ?
Nachtrag: Habe eben durch Zufall was entdeckt. Ich habe nämlich in meinem Skinsystem, welches für OpenGL gemacht ist, einfach mal stupide eines meiner Labels (zeichnen einfach nur Text auf eine 2D-Fläche) zeichnen lassen. Und schwupp ist der Fehler weg. Die Sache ist bloß etwas nervig, denn kaum löst man ein Problem kommt ein anderes: Es ist insgesamt alles dunkler geworden und die Saturnringe (eine Scheibe mit einer extrem dünnen Höhe) sind komplett lichtlos. Womit könnte das nun wieder zusammenhängen und warum beseitigt ein total sinnloser Aufruf der folgenden Prozedur den Hauptfehler ?
Code:
// Text zeichnen procedure TSkinElement.DrawText(s : String; Left, Top : Integer); var Textur : GluInt; // Textur zum zwischenrendern W, H : Integer; // Breite und Höhe des Textes begin TTF_SizeText(Form.Schrift, PChar(s), W, H); // Textbreite- und Höhe bestimmen LoadTexture(TTF_RenderText_Blended(Form.Schrift, PChar(s), Schema.Schrift), Textur); // Text rendern und in Textur laden glBindTexture(GL_TEXTURE_2D, Textur); // Textur binden // Blenden glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); DrawTexture(Left, Top, W, H, 0); // Textur zeichnen glDisable(GL_BLEND); glDeleteTextures(1, @Textur); end;
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.