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

Aktuelle Zeit: Do Mai 16, 2024 13:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturlookup
BeitragVerfasst: Mo Aug 17, 2009 09:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Hi,
bei mir funktionert der Textur lookup nicht, ich habe mir einen Testshader für Kantenerkennung geschrieben. leider funktionert er nicht, es wird überall 0 ausgegeben. Also ich will die Nachbar Pixel bekommen, dann Teste ich ob sie sich in der Farbe um den Wert Zw unterscheiden und male dan erstmal rot oder grün.
Code:
  1. uniform sampler2D Texture0;
  2.  
  3. void main(void)
  4. {
  5.  float x = gl_TexCoord[0].x;
  6.  float y = gl_TexCoord[0].y;
  7.  
  8.  vec4 Nor = texture2D(Texture0, vec2(x+0.0,y));
  9.  vec4 AbR = texture2D(Texture0, vec2(x+2.0,y));
  10.  vec4 AbL = texture2D(Texture0, vec2(x-4.0,y));
  11.  vec4 Zw = vec4(0.2,0.2,0.2,0.2);
  12.  
  13.  vec4 Pr1= vec4(0.2,0.2,0.2,0.2);
  14.       Pr1.r = Nor.r-AbR.r;
  15.       Pr1.g = Nor.g-AbR.g;
  16.       Pr1.b = Nor.b-AbR.b;
  17.  
  18.  vec4 Pr2   = vec4(0.0,0.2,0.2,0.2);
  19.       Pr2.r = Nor.r-AbL.r;
  20.       Pr2.g = Nor.g-AbL.g;
  21.       Pr2.b = Nor.b-AbL.b;
  22.  
  23. if ((Pr1.r == Zw.r)  )//&& (Pr2.r < Zw.r))
  24.    {
  25.     gl_FragColor = vec4(0.0,1.0,0.0,0.0);
  26.    }
  27. else
  28.    {
  29.     gl_FragColor = vec4(1.0,0.0,0.0,0.0);    
  30.    }
  31. }

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 09:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was sagt den das folgende?
[glsl]gl_FragColor = texture2D(Texture0, gl_TexCoord[0]); [/glsl]

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 10:05 
Offline
DGL Member

Registriert: So Jun 23, 2002 12:37
Beiträge: 144
Programmiersprache: C/C++, Delphi
Code:
  1.  vec4 Nor = texture2D(Texture0, vec2(x+0.0,y));
  2.  vec4 AbR = texture2D(Texture0, vec2(x+2.0,y));
  3.  vec4 AbL = texture2D(Texture0, vec2(x-4.0,y));
  4.  

also ich weiß nicht genau wie es in GLSL läuft aber in HLSL werden die Texturen mit Koordinaten als floats[0.0 ... 1.0] angesprochen. Du müsstest die größe der Textur als Parameter an den Shader übergeben und dann das Offset für den linken und rechten Texel umrechnen.
Irgendwo hab ich aber auch mal gelesen, dass man mit irgendeiner Einstellung direkt über die Integer Koordinaten auf die Textur zugreifen kann.

_________________
--->ladida<---


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 10:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Coolcat hat geschrieben:
Was sagt den das folgende?
[glsl]gl_FragColor = texture2D(Texture0, gl_TexCoord[0]); [/glsl]

Das "sagt" das richtige (um das TexCoord muss noch vec2). Es gibt mir den Textur Pixel . Ich habe auch einen Shader der funktioniert, dort werden Texturlookups auf die gleiche weise gemacht wie bei dem Shader dem ich gepostet habe. Ich hab den Fehler gefunden. Ich hab vergessen, das nicht in Pixeln mit 1,2... gerechnet wird sondern mit Werten von 0 bis 1, ich habe ja am Anfang +2 und -2 gerechnet, es muss aber 0,001 etc. heißen.

@EnORItZ: Oh, dass hattest du auch schon geschrieben, dann vielen dank nochmal an dich.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 10:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Irgendwo hab ich aber auch mal gelesen, dass man mit irgendeiner Einstellung direkt über die Integer Koordinaten auf die Textur zugreifen kann.

Ja, mit der Funktion texelFetch2D(sampler2D sampler, ivec2 coord, int lod). Benötigt die Extension GL_EXT_gpu_shader4 und entsprechend neue Grafikkarte. Übrigens gibt es dann auch die Funktion ivec2 textureSize2D(sampler2D sampler, int lod) mit deren Hilfe man die Texturgröße auslesen kann. Es wird also kein extra Uniform dafür mehr benötigt.

_________________
Yeah! :mrgreen:


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.024s | 19 Queries | GZIP : On ]