Und zwar bin ich jetzt beim Color Picking Tutorial http://wiki.delphigl.com/index.php/Tutorial_ColorPicking. Shader kommen für mich nicht in Frage, ich bewege mich momentan wohl eher auf OpenGL 1.x Niveau und das ist auch erstmal gut so
Also versuche ich mich an der Shaderlosen Variante, für diese hat es wohl einmal ein Tutorial ColorPicking.pdf gegeben, leider ist dieses aber nicht mehr herunterladbar Vielleicht hat das noch jemand ?
Ich versuche nun also durch die Shadervariante durchzusteigen (ohne Shader) und habe das soweit mal in meinen Code eingebaut. So wie ich das verstanden habe macht der Shader nix anderes als die anklickbaren Objekten in einer bestimmten Farbe zu zeichnen (eben die Color die dann gepickt wird).
Statt dem Shader zeichne ich nun also beispielsweise mit
Code:
glColor3b(100, 100, 100);
ein Objekt welches man anklicken können soll.
In der Select-Function aus dem Tutorial werden dann ja die Pixel in einen Puffer "PixelData" gelesen und geprüft ob genügend andere Pixel mit derselben Farbe rundherum vorhanden sind um Anti-Aliasing auszugleichen, danach noch die Bitschieberei wegen Little/Big-Endian.
Wo ich jetzt etwas unsicher bin: Ist jetzt das Ergebnis der Select-Function, bzw. die Daten aus PixelData[4] der Farbwert auf den geklickt wurde ? Ich erhalte, um bei obigen glcolor-Befehl zu bleiben dann als Ergebnis 13224393 von Select, bzw. 4278387459 in PixelData[4].
Laut Tutorial soll dieses Funktionsergebnis der Index der benutzen Objectliste sein (die ich nicht habe und deren Index auch nur von 1 bis 3 reicht) und diese Indexe werden für den Shader in Farben umgerechnet (hab ich ja auch nicht), also steh ich ziemlich ratlos da. Ich vermute ja, das das Geheimnis in diesen Zeilen steckt
Code:
// Den Index in eine Farbe umrechnen und im Shader setzen
aber die Seite im Wiki zu glUniform4f bringt mich auch nicht wirklich weiter. Ich verstehe zwar das die Schleifenvariable i und das Array iv sich überschneiden und das damit eindeutige Farben erzeugt werden, die dann im Shader benutzt werden, aber das hilft mir trotzdem irgendwie nicht weiter. Ich würde dieses Tutorial sofort als eine Stufe schwieriger einstufen (drei Sterne)
Steht denn jetzt das Funktionsergebnis 13224393 (bzw. die Daten aus PixelData[4]) in irgendeiner Beziehung zu der benutzten Farbe (100,100,100) beim Zeichnen ?
Denn dann bräuchte ich ja nur irgendwie die Möglichkeit das konvertieren zu können ?
_________________ Die Benutzung von Web 2.0+ mithilfe eines Brain 1.0 wird wegen unzureichender Security-Updates NICHT empfohlen. Bitte upgraden Sie auf Brain 2.0, jetzt für Sie exklusiv noch lieferbar!
Zum Funktionsergebnis: Hast du zufällig 201, 201, 201 als Farbe verwendet? Dann würde das passen… für 100, 100, 100 eher nicht.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Jetzt kann ich das Funktionsergebnis von Select an die obige Funktion übergeben und bekomme in dem var-Array die korrekten Farbwerte zurück. Das funktioniert soweit, ich bin nur noch unsicher ob ich jetzt bei Little Endian das letzte Byte, bzw. bei Big Endian das erste Byte einfach ignorieren kann, ist bei mir (mit LE) jedenfalls immer = 0 ?
Danke auch für den Link
_________________ Die Benutzung von Web 2.0+ mithilfe eines Brain 1.0 wird wegen unzureichender Security-Updates NICHT empfohlen. Bitte upgraden Sie auf Brain 2.0, jetzt für Sie exklusiv noch lieferbar!
Mitglieder in diesem Forum: 0 Mitglieder und 14 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.