Hallo zusammen,
der folgende Quellcode soll ein Planetarium simulieren mit Delphi 6; dazu wollte ich auch eine skybox einführen, wie im Skybox Tutorial beschrieben. Leider werden trotz deaktiveiren backface Culling nur 3 von 6 Texturen gezeichnet. Dies scheint zusätzlich dazu zu führen, dass alle Objekte schwarz dargestellt werden. Ich kann den Fehler leider nicht ausmachen.
Darüber hinaus wollte ich fragen, ob ihr weitere Fehler oder Unschönheiten entdecken könnt, bei denen es bessere Möglichkeiten der Umsetzung gäbe.
Die Texturen liegen mit den entsprechenden Namen und der entsprechenden Auflösung im selben Verzeichnis.
Falls dieses Problem schnell gelöst werden sollte, plante ich zusätzlich die Sonne als Lichtquelle einzurichten und Texturen auf die Planeten und rendern.
Doch mit Gentexture zeigt mir jeder Planet trotz Drehung immer die selbe Seite.
Das Problem habe ich zwar noch nicht gefunden, aber mir sind ein paar Unschönheiten aufgefallen:
1. glGenLists liefert doch TGLUInt zurück und nicht cardinal (hab leider länger nicht in Delphi programmiert und weiß daher nicht mehr, was cardinal für ein Typ ist)
2. Bevor die Planeten gezeichnet werden (TForm1.Render) sollte glDisable(GL_TEXTURE_2D) stehen, da mit glColor sonst die Textur eingefärbt wird und man nicht nur die Farbe, sondern Farbe+Textur sieht. (Und danach natürlich wieder glEnable(GL_TEXTURE_2D) damit Texturen (für die Skybox) wieder aktiviert sind)
3. Ist es nicht sinnvoller statt gluPerspective(60...) in TForm1.Render und gluPerspective(45...) bei TForm1.FormResize einfach nur einmal gluPerspective(60...) in TForm1.FormResize aufzurufen?
Ich weiß nicht ob es daran liegt, aber wird vor dem Zeichnen der Skybox der Tiefenbuffer geleert oder der Depthtest ausgeschaltet?
Und noch etwas in Sachen "Unschönheiten": Bei einer Skybox ist es egal wie groß sie gezeichnet wird, d.h. egal wie die Parameter bei GenerateSkybox sind (solange das Verhältnis zueinander gleich ist), das Ergebnis sieht immer gleich aus (wenn der Tiefentest aus ist, ansonsten wird die Skybox vllt teilweise verdeckt).
Hm, und in jedem Frame setzt du glClearColor, aber benutzen tust du es nicht oder?
Nach was: Kann es sein, dass die Matrix wenn die Skybox gezeichnet wird immernoch eine Translation enthält, d.h. verschoben ist?
Vielen Dank erstma. Die Tipps haben schon prima "gewirkt" ^^
Ich hab die Texturen nochmal überprüft und die Verbesserungsvorschläge soweit wie möglich umgesetzt (hoffe ich); mit diesem Code funktioniert die Darstellung soweit, wie ich sie haben wollte:
Code:
gldepthMask(false);
glMatrixMode(GL_MODELVIEW);
// Liste aufrufen
glCallList(List);
gldepthMask(true);
glDisable(GL_TEXTURE_2D);
glClear(GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glTranslatef(0,0,-40);
glRotatef(xrot,1,0,0);
glRotatef(yrot,0,1,0);
glPushMatrix();
[...Hier werden die ganzen Planeten gezeichnet...]
glPopMatrix();
glColor3f (1,1,1);//<--------Warum ist das hier nötig? Sonst werden die Texturen alle mit der Farbe des letzten
//Planeten eingefärbt, obwohl textur enabled und disabled wird?
glEnable(GL_TEXTURE_2D);
drehen:=drehen+0.4;
SwapBuffers(DC);
Falls euch noch weitere Fehler aufstoßen, bitte bescheid sagen^^.
Nun wollte ich ja zusätzlich, wie vorher schon erwähnt, die Planeten mit Texturen beglücken, anstatt sie einfach einzufärben.
Um die Planeten zu zeichnen benutze ich ja GLuSphere, was wäre jetz sinnvoll, um einen Planeten zu texturieren? mit Gentexture zeigen mir alle Planeten trotz Drehung immer die selbe Seite.
Und wäre es möglich, die Sonne als Lichtquelle einzurichten, oder wäre das für einen Anfänger zu viel Aufwand?
Also ich hab auch mal so ein kleines Sonnensystem mit Sonne, Erde und Mond geschrieben und auch glGenTextures(...) verwendet, falls du das meinst. Bei mir haben mir die Planeten dann aber nicht immer die selbe Seite gezeigt, wenn ich sie mit glRotatef gedreht habe. Die Texturen werden ja schon vor dem Rendern geladen, also müsste eigentlich alles klappen. (Natürlich nur, wenn man die Planeten auch dreht ).
Wie genau soll die Sonne als Lichtquelle denn aussehen? Soll die Sonne durch die Lichtquelle ersetzt werden, was zum Nachteil hätte, das man sie nicht mehr wirklich sieht, oder soll die Sonne so bleiben wie jetzt (nur mit Textur) und das Licht kommt aus ihr heraus? Das sähe zwar bestimmt schön aus, ist aber auch recht schwierig, da wenn man die Lichtquelle in die Sonne setzt man kein Licht mehr sieht , da die Sonne das Licht von innen ja nicht durchlässt (vielleicht mit Culling?). Dann müsste man entweder Lichter auf der Sonnenoberfläche benutzen oder die Sonne mit Blending transparent machen, sodass das Licht durch die Sonne hindurch scheinen könnte. Auf jeden Fall müsste man dann ja diffuses Licht benutzen, da die Richtung erkennbar ist und es mit Entfernung abnimmt.
Das hört sich leider sehr kompliziert an, aber vielleicht geht's auch einfacher, habe selbst noch nicht so viel mit Licht gearbeitet...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@glmatt: Du kannst deine Lichtquelle hinsetzen wo du willst. Eine Abschattung findet nicht statt. D.h. OpenGL Licht scheint auch durch Wände. Wer echten Schatten will, muss richtig arbeit investieren.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Oh, OK. Dann ist das mit der Sonne ja vielleicht gar nicht so schwierig
@Flash: Wird dann denn auch die Wand beleuchtet, durch die das Licht durchscheint? Also wenn ich die Sonne sehe und das Licht aus ihr "heraus" scheint, ist dann auch die Oberfläche der Sonne erleuchtet?
Und wie texturiere ich jetzt einen Planeten? Das Problem ist nämlich, dass die Skybox zum Texturieren scheinbar was anderes benutzt, als es in den restlichen Tutorials erklärt ist.
Ich habe immer GL_TRUE als zweiten Parameter von gluQuadricTexture benutzt, weil man sonst die Texturkoordinaten ja selber berechnen muss und dass war mir immer zu viel Aufwand
Ich habe immer GL_TRUE als zweiten Parameter von gluQuadricTexture benutzt, weil man sonst die Texturkoordinaten ja selber berechnen muss und dass war mir immer zu viel Aufwand
Leider bin ich immer noch unfähig.....jetz wird die Skybox komplett falsch gezeichnet und der Planet ist immer noch nicht so, wie er sein sollte :
Mitglieder in diesem Forum: 0 Mitglieder 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.