Hallo,
wie zum Geier programmiert man im Windows OpenGl eine Kugel?
Ich sitze jetzt schon stundenlang an der Kiste, und alles was ich bekomme ist ein verdammter Kreis, obwohl ich schon in der dritten Dimension arbeite. Ich hatte es mir so gedacht, dass ich einen Kreis mache, und den dann um die x-Achse rotieren lasse. Aber das will und will einfach nicht. Ich bin ratlos. Bitte helft mir
Programmieren - alles kontrollieren 4.938 Themen, 20.667 Beiträge
Interessante Aufgabe.
Ich entwickel hier mal ein bischen: Also ersta mal würde ich die Kugel waagrecht in Scheiben schneiden. Dadurch ergeben sich mal im allgemeinen Bänder und zwei Kappen. Ich arbeite mehr mit DX und da gibt es Rendermethoden mit denen man Streifen einfach zeichnen kann.
Basierend auf einem Konstrukteurs-CS (x,y in der Ebene, z ist Höhe)
solltest du die Scheiben ungleich dick manchen. Betrachtest du die Kugel in XZ so wird der rechte Rand von [ cos(a), sin(a), 0 ] Vektoren beschrieben mit a = -pi/2..+pi/2.
Unterteil jetzt gleichmäßig a in n Teile( je mehr desto Runder ). Diese Punkte auf den Winkeln a(i)= -pi/2 + pi/n*i liegen damit auf den Schnittlienien.
Diese Punkte rotierst du jetzt um Z im Winkel b = 0..2pi. b Unterteilst du in doppelt so viele Teile wie a, da b auch einen doppelt so großen Winkelbereich überstreicht. b(i) = pi/n*i
Zusätzlich wird von unten jeder Ring noch um pi/(2*n) weitergedreht, um die Ringe gegeneinander zu versetzen. Also der erste Ring um pi/(2*n) der nächste um 2*pi/(2*n) der dritte um 3*pi/(2*n)
Auf diesem Punktewust fängst du an deine Bänder zu stricken:
Ungerade Dreiecke werden von zwei Punkten des Unteren bandes und 1 Punkt des oberen Band definiert.
Wenn das untere Band A heist und das obere B so werden die Ungeraden dreicke definiert durch [A(i),B(i),A(i+1)]
Gerade Dreiecke werden von zwei Punkten des Oberen und einem des unteren Bandes definiert.
Wieder mit A und B wie gerade eben: [B(i), B(i+1), A(i+1)]
Diese Dreiecke haben auch schon den gleichen Drehsinn für Backface-culling. Wenn du nur die Innenseite deiner Kugel siehst, dreh die Drehmatrix für die Z-rotationen um. Natürlich machst du nur (2*n)-1 Dreieckspaare wegen den +1.
Die Normalen an jedem Punkt sind die Vektoren vom Mittelpunkt durch jeden Punkt für Phong und Gouraud shading. Für Flatshading solltest du die Linie vom Mittelpunkt durch die Mitte jedes Dreiecks wählen.
Frag ruhig weiter falls noch was klar ist ;-)
Ich hab zwar nur selten Zeit, dann aber meist lang