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

Aktuelle Zeit: Mo Mai 13, 2024 22:50

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme beim Color Picking
BeitragVerfasst: Mi Jun 01, 2011 10:35 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
Hallo,

ich versuche gerade nochmal Color Picking zum laufen zu bringen, allerdings bekomme ich die falschen Werte zurück.

Es scheint als ob ich die Werte bekomme die ich auch sehe, nicht die codierten.

Wenn ich glUseProgram(0); aus der Selekt funktion auskommentiere dann geht alles aber dann seh ich ja die codierten Werte.
Ich häng alle nötigen Code-Schnipsel an vieleicht kann mir ja jemand helfen.

lg

Initialisation:

Code:
  1.   SelShader := TSelShader.Create('Data\Shader\Sel.Shader');
  2.   glUseProgram(SelShader.ProgramObject);
  3.   SelShader.Init;
  4.  
  5.   Map := TMap.Create;
  6.   Map.SetWindow(ClientWidth, ClientHeight);


Code:
  1. procedure TSelShader.Init;
  2. begin
  3.   Color := glGetUniformLocation(ProgramObject, 'color');
  4.   UseAlphaTex := glGetUniformLocation(ProgramObject, 'use_alpha_tex');
  5.   glUniform1i(glGetUniformLocation(SelShader.ProgramObject, 'use_alpha_tex'), 0);
  6.   glUseProgram(0);
  7. end;


Code:
  1. constructor TMap.Create;
  2. var x,y : Integer;
  3. begin
  4.  Count := 0;
  5.  y := 0;
  6.  SetLength(Blocks, 64);
  7.  for x := 1 to 64 do begin
  8.   if y = 4 then y := 0;
  9.   Blocks[x] := TBlock.Create;
  10.   Blocks[x].Pos := SetVec3v(y*2-5,round(x/8)-4,-15);
  11.   Blocks[x].ID := Count;
  12.   Count := Count+1;
  13.   y := y +1;
  14.  end;
  15. end;


Rendern:

Code:
  1. procedure TMap.Render(Sel_Mode : Boolean = false);
  2. const
  3.   fac: single = 1/255;
  4. var
  5.   i: longword;
  6.   iv: array [0..3] of byte absolute i; // iv und i überschneiden sich
  7. begin
  8.   for I := 1 to High(Blocks) do begin
  9.    if Sel_Mode then begin
  10.       {$ifdef ENDIAN_BIG}
  11.       glUniform4f(SelShader.Color, iv[1]*fac, iv[2]*fac, iv[3]*fac, 1.0);
  12.       {$else}
  13.       glUniform4f(SelShader.Color, iv[0]*fac, iv[1]*fac, iv[2]*fac, 1.0);
  14.       {$endif}
  15.    end;
  16.     glLoadIdentity;
  17.     Blocks[i].Render;
  18.   end;
  19. end;


Anmerkung: Der Sel_Mode verhindert ein Error (Der Vorgang ist Ungültig) wenn der shader nicht gebunden ist aber trotzdem werte übergeben werden sollen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme beim Color Picking
BeitragVerfasst: Mi Jun 01, 2011 10:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wenn ich glUseProgram(0); aus der Selekt funktion auskommentiere dann geht alles aber dann seh ich ja die codierten Werte.

Das zu zweimal rendern musst weiß du aber, oder? Einmal für die Selektion und einmal damit du was siehst. Ich finde es merkwürdig, dass du für die Selektion scheinbar in den normalen Framebuffer renderst und nicht etwa in einen FBO. Vielleicht fehlt aber auch nur der entsprechende Teil des Quellcodes.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme beim Color Picking
BeitragVerfasst: Mi Jun 01, 2011 11:49 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
Ich Rendere 2 mal, 1x so das ich sehe was der Nutzer sehen soll und einmal mit aktivem Shader.

allerdings wird auch im Tutorial nur 1 Renderprocedure verwendet und in den Normalen Buffer geschrieben.

In der Selekt funktion wird nocheinmal Gerendert ohne dies anzuzeigen
Code:
  1.   glUseProgram(SelShader.ProgramObject);
  2.   glClearColor(0.0, 0.0, 0.0, 0.0);
  3.   glEnable(GL_SCISSOR_TEST);
  4.   glScissor(x, y, 3, 3);
  5.  
  6.   Render(true);
  7.   glClearColor(0.1, 0.1, 0.1, 0.0);
  8.   glUseProgram(0);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme beim Color Picking
BeitragVerfasst: Mi Jun 01, 2011 12:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Sag doch das du das Tutorial benutzt:
http://wiki.delphigl.com/index.php/Tuto ... ing_Shader
Dann macht dein Post plötzlich viel mehr Sinn, weil jetzt z.B. klar ist was die "Selekt funktion" sein soll ;)

Also mein Tipp wäre das dein normales Rendering aus irgendeinem Grund kaputt ist. Wäre es beispielsweise möglich das alles was du normal renderst einfach nur schwarz ist? Z.B. weil die Textur die der Color-Picking-Shader benutzt noch gebunden ist. Einfach mal die clearColor auf irgendwas nicht-schwarzes drehen.

Edit:
Noch ne Idee: Der Z-Buffer wird in Render nicht gelöscht! Wenn du das zweite mal renderst verhindert der Z-Buffer das irgendwas passiert, die Z-Werte sind ja identisch. Bau da mal ein
Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT);

rein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme beim Color Picking
BeitragVerfasst: Mi Jun 01, 2011 15:49 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
das ist wieder so ein ding wo es mich ärgert das ich seit 3 tagen nicht allein drauf gekommen bin.

genau das hat gefehlt danke dir :)


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


Wer ist online?

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.

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