ich bin gerade dabei Colorpicking zu implementieren als Selektionsmethode, aber es gibt etwas Ärger: Alle Objekte sind grau im selben Farbton. Daher funktioniert das Colorpicking nicht. Ich habe nichts weiter gemacht als beim zusätzlichen Renderdurchlauf das Licht auszuschalten und keine Texturen zu zeichnen, anstelle der Texturen habe ich glColor3ub(TexID*8, 0, 0) bei allen gluSpheres reingebastelt. Aber wie gesagt sind sie alle grau. Farbtiefe ist 32 Bit, gibt es irgenwelche Einstellungen die man beim Colorpicking noch ändern sollte ? Ich habe die gewöhnliche Render aktiv, die zusammengefasst und gekürzt diese ist:
Ich kann Euch höchstens noch DrawSphere anbieten in der Hoffnung, dass da ein Fehler drinnen ist (in letzter Zeit sind meine Fragen immer so unerklärlich, ich weiß einfach nicht woran es liegt und welche Details ich Euch noch nennen sollte):
Code:
// Kugel zeichnen procedure TSolar.DrawSphere(AngleX, Radius, Scale, Inclination : Real; Position : pVec3f; TexID : Byte; ShowAxes, Sel : Boolean); var Sphere : pGLUQuadricObj; begin // Verschieben, Rotieren, Skalieren glPushMatrix; glTranslatef(Position[0], Position[1], Position[2]); glRotatef(AngleX, 0.0, 1.0, 0.0); glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(Inclination, 1.0, 0.0, 0.0); glScalef(Scale, 1.0, 1.0); // Quadric erstellen Sphere := gluNewQuadric; // Selektion if Sel then glColor3ub(TexID*8, 0, 0) else // Textur setzen begin 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; end; // Kugel erstellen gluSphere(Sphere, Radius, TRIANGLES, TRIANGLES); gluDeleteQuadric(Sphere); if glIsEnabled(GL_TEXTURE_2D) then glDisable(GL_TEXTURE_2D); glPopMatrix; end;
Die Texturierung klappt aber die Farbwerte lassen sich nicht zuweisen. Das wäre noch die MouseDown, aber die hat damit nichts zu tun, ich zeichne gerade den normalen Renderdurchlauf auch ohne Texturen und stattdessen versuche ich ihn mit Farbe zu zeichnen, dann sieht man wenigstens sofort ob es klappt oder nicht.
Also mir fällt dazu ein das möglicherweise Blending aktiv ist. Außerdem ist es eine gute Idee explizit irgendwo glBindTexture(0) zu setzen um die Texturen zu deaktivieren. Die Textur bleibt ja solange aktiv bis eben irgendeine andere gebunden wird.
Wenn ich die Skysphere testweise mal mitzeichne ist der Hintergrund plötzlich rot und die Planeten schwarz. Da man bei der Skysphere den Tiefentest und das Licht deaktiviert, fand ich das recht interessant und habe nochmal explizit mit dem Licht rumexperimentiert. Es scheint so als wäre das Licht noch an gewesen, das war bei der Skysphere ja nicht der Fall, da ich es direkt vor dem Zeichnen der Skysphere deaktiviert habe. Habe nun einfach das Licht nochmal direkt vor dem Zeichnen aus gemacht und es läuft. Die Idee mit dem expliziten Deaktvieren der Textur hat mich irgendwie drauf gebracht, vielen Dank!
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.