Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 03:39

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Sep 11, 2013 23:03 
Offline
DGL Member

Registriert: Mi Sep 04, 2013 14:08
Beiträge: 34
Programmiersprache: FPC/Lazarus - Delphi
Hallo, ich bräuchte mal wieder eure Hilfe :roll:

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 :P

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 :cry:
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:
  1. 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:
  1. // Den Index in eine Farbe umrechnen und im Shader setzen
  2. {$ifdef ENDIAN_BIG}
  3. glUniform4f(SelShader.color, iv[1]*fac, iv[2]*fac, iv[3]*fac, 1.0);
  4. {$else}
  5. glUniform4f(SelShader.color, iv[0]*fac, iv[1]*fac, iv[2]*fac, 1.0);
  6. {$endif}

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) :mrgreen:


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!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 12, 2013 09:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die NSAArchive.org ist dein Freund: colorpicking.pdf vom 13.05.2012.

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 12, 2013 11:05 
Offline
DGL Member

Registriert: Mi Sep 04, 2013 14:08
Beiträge: 34
Programmiersprache: FPC/Lazarus - Delphi
Nach ein bißchen debuggen hab ich's dann auch geschnallt, ich setze jetzt die Farbe z.b. mit
Code:
  1. glColor3ub(25, 50, 75);

und habe mir folgende Funktion geschrieben
Code:
  1. procedure GetColor3ub(pixelcolor: longword; var colors: array of byte);
  2. var colorbytes: array [0..3] of byte absolute pixelcolor;
  3. begin
  4.   {$ifdef ENDIAN_BIG}
  5.     colors[1]:= colorbytes[1];    colors[2]:= colorbytes[2];
  6.     colors[3]:= colorbytes[3];                colors[0]:= colorbytes[0];
  7.   {$else}
  8.     colors[0]:= colorbytes[0];    colors[1]:= colorbytes[1];
  9.     colors[2]:= colorbytes[2];                colors[3]:= colorbytes[3];
  10.   {$endif}
  11. end;
  12.  

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 :D

_________________
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!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 13, 2013 20:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Der vierte Wert ist der Alphawert. Wenn dein Framebuffer Alpha kann kannst du die vollen 32bit für deine Indices nutzen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.067s | 18 Queries | GZIP : On ]