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

Aktuelle Zeit: Fr Jul 11, 2025 06:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Bumpmapping
BeitragVerfasst: Fr Jul 09, 2010 19:50 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Hi,

ich habe den Bumpmapshader aus euerer Shadersammlung in meinem Programm angewendet und musste feststellen,
das dieser nicht richtig läuft. Grund dafür müsste das Multitextureing sein.

Hier der Code zum Rendern:

Code:
    // Texture
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, Render.Image[textureId].tex);

    // Normal-Map-Texture
    glActiveTexture(GL_TEXTURE1);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, Render.Image[MaterialSystem.Material[materialId].normtextureId].tex);

    // ...


(Normalen sind richtig gesetzt)
Dateianhang:
Dateikommentar: Screenshot
bump.jpg [203.25 KiB]
Noch nie heruntergeladen


Was mache ich falsch?

Mfg, Pk3 :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 12:26 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Habs jetzt einigermaßen hinbekommen, aber das Licht wird nur im 180° - Winkel dargestellt. Je nach dem von welcher Seite ich auf das Licht schaue scheint es in meine Richtung. Am Vertex- und Fragmentshader habe ich kleine Änderungen gemacht:

Fragment-Shader:
Code:
const float PI = 3.14159265;        //Pi, zur Berechnung der Rotation
const int LIGHT_COUNT = 1;          //Anzahl der berücksichtigten Lichter
varying vec3 N;                     //NormalenVektor
varying vec3 V;                       //VertexVektor   
varying vec3 lightvec[LIGHT_COUNT]; //LichtVektor(en)
uniform sampler2D Texture0;         //normale Textur
uniform sampler2D Texture1;         //NormalMap
 
vec3 rotate(vec3 a, vec3 p, float rad) {
   vec3 p1 = cos(rad) * p + sin(rad) * cross(a, p);
   return p1;
}
 
void main(void) {
   vec2 TexCoord = vec2(gl_TexCoord[0]);
   vec3 G = normalize(vec3(dFdx(TexCoord.s), dFdy(TexCoord.t), 0.0));
   vec3 B = normalize(rotate(N, cross(N, G), -0.25*PI));
   vec3 T = normalize(cross(B, N));
   mat3 M = mat3(T, B, N);

   vec3 normal = normalize((vec3(texture2D(Texture0, TexCoord)) - vec3(0.5, 0.5, 0.5)) * M);
   normal = gl_NormalMatrix * normal;
 
   vec3 Eye = normalize(-V);
   vec4 EndColor = vec4(0.0, 0.0, 0.0, 1.0);
   for(int i = 0; i < LIGHT_COUNT; i++) {
      vec3 Reflected = normalize(reflect(-lightvec[i], normal));
      vec4 IAmbient  = gl_LightSource[i].ambient  * gl_FrontMaterial.ambient;
      vec4 IDiffuse  = gl_LightSource[i].diffuse  * max(dot(normal, lightvec[i]), 0.0) * gl_FrontMaterial.diffuse;
      vec4 ISpecular = gl_LightSource[i].specular * pow(max(dot(Reflected, Eye), 0.0), gl_FrontMaterial.shininess) * gl_FrontMaterial.specular;
      EndColor += (IAmbient+IDiffuse+ISpecular);
   }
 
   gl_FragColor = (gl_FrontLightModelProduct.sceneColor + EndColor);
   gl_FragColor.w = 1.0;
}


Vertex-Shader:
Code:
const int LIGHT_COUNT = 1;          //Anzahl der berücksichtigten Lichter
varying vec3 N;             //NormalenVektor
varying vec3 V;             //VertexVektor   
varying vec3 lightvec[LIGHT_COUNT]; //LichtVektor(en)
void main(void) {
   gl_TexCoord[0]  = gl_MultiTexCoord0;
   N             = normalize(gl_Normal);
   V      = vec3(gl_ModelViewMatrix * gl_Vertex);
   for(int i = 0; i < LIGHT_COUNT; i++){
      lightvec[i] = normalize(gl_LightSource[i].position.xyz - V);
   }
   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
}


Momentan verwende ich nur eine Textur (Normalmap).

Screenshot:
Dateianhang:
bumpmapping.jpg [114.35 KiB]
Noch nie heruntergeladen


Hab auch schon hier im Forum gesucht und etwas gefunden, jedoch funktioniert das überhaupt nicht, weil das Licht sich dann
bewegt und komische Muster entstehen....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

der Beitrag von mir, den du gepostest hast is aus dem alten Tutorial, das is nich mehr aktuell. Aus diesem Grund hab ich ja dann mit der Hilfe der anderen auch den Shader geschrieben.
Mit den Texturen hatte ich kein Problem. hier ma mein RenderCode:
Code:
  glColor4f(1,1,1,1);
  glActiveTexture(GL_TEXTURE0); Tex.Bind;
  glActiveTexture(GL_TEXTURE1); NormalMap.Bind;

  Light1.Bind(GL_LIGHT0);
  Material.Bind;
  Shader.Bind;
  glBegin(GL_QUADS);
    glNormal3f(0,0,1);
    glTexCoord2f(0,1); glVertex3f(-2,-2, 0);
    glTexCoord2f(1,1); glVertex3f( 2,-2, 0);
    glTexCoord2f(1,0); glVertex3f( 2, 2, 0);
    glTexCoord2f(0,0); glVertex3f(-2, 2, 0);
  glEnd;
  Shader.Unbind;
  glActiveTexture(GL_TEXTURE0); Tex.Unbind;
  glActiveTexture(GL_TEXTURE1); NormalMap.Unbind;
  glDisable(GL_LIGHTING);


Hast du dem Shader auch mitgeteilt, welche Texturen du benutzen willst?
Code:
  Shader.Bind;
  Shader.SetParam1i('Texture0', 0);
  Shader.SetParam1i('Texture1', 1);
  Shader.Unbind;


€: wie meinst du das mit den 180°? bei mir funzt er 1a...

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 15:21 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Das mit den Texturen hab ich jetzt hinbekommen mittels glUniform1i.
Einziges Problem ist das mit dem 180° - Winkel. Ich hab in meinem letzten Beitrag ein
Screenshot angehängt wo das zu sehen ist :wink:.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Dein Screenshot ist für außen stehende wenig hilfreich, da wohl niemand außer dir weiß wie das den korrekt aus sehen sollte. Z.B. die Normalmap wäre hilfreich.

Zitat:
Einziges Problem ist das mit dem 180° - Winkel

Wie genau ist das gemeint? Bei einem 180-Winkel sollte es doch reichen die Normale bzw. den Vektor zur Lichtquelle zu invertieren?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 15:39 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Das gesamte Licht ist nur in einem 180° - Winkel zu sehen. Mal scheint das Diffuse - Licht auf die eine, dann auf die andere
Seite, je nach dem wie die Kameraposition ist. Das Specular - Licht jedoch ist immer auf der selben Seite.
Auf dem Screenshot oben sieht mans net so gut, aber oben sieht man, das es auf der Seite dunkel ist.

Normal-Map: http://xyross.de/file.php?id=59

Edit: Ich verwende Punktlich, aber der Shader stellt das Licht als Direktionslicht ein


Zuletzt geändert von Pk3 am Sa Jul 10, 2010 18:04, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 17:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

also meinst du die Hinterseide vom Quad? Das geht nich anders glaube ich. Da musste einfach noch n 2. Quad drauf zeichnen un dann dementsprechend den Normalenvektor neu setzten.

€: ne der Shader berechnet das Licht in Abhängigkeit der Lichtposition.

MfG Bergmann

p.s.: der Download der Normalmap geht nich.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 18:09 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Nene, hier ist ein besseres Bild, das zeigen soll was ich meine :wink: :

http://xyross.de/file.php?id=60

Auf der linken Seite ist es dunkel, aber es soll ja ein Punktlicht sein...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 20:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
hey,

sieht in der Tat komisch aus. Kannst du die Exe ma hochalden? Würd mir das gern ma in Echtzeit angucken. Sicher das die Normalen alle stimmen? Ändert sich die dunkle Stelle wenn du das Licht um das Objekt drehst? Ich denke nicht das es was mit Punktlichtern oder Direktionslicht zu tun hat. Denn der Shader arbeitet auf alle Fälle mit Punktlicht, weil ja die Daten des Lichts verrechnet werden. Wäre es direktionslicht würde man ja nur den Vektor übergeben. Ich hab auch ma irgendwo was von ner maximalen Leuchtweite von Licht gelesen, danach sieht es mir nämlich eher aus. Ich weiß aber nich mehr genau was in dem Artikel stand.

€: hast du's schonma mit nem normalen Per-Pixel-Beleuchtungs-Shader versucht? Wenn es da genau so aussieht muss es was anderes sein...

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Sa Jul 10, 2010 21:29 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Zitat:
Kannst du die Exe ma hochalden?

Jo kannsts hier runterladen:
http://xyross.de/file.php?id=62

Mit den Pfeiltasten und mit Bild hoch/runter kannste das Licht positionieren.
Mit W,A,S,D kann man rumfliegen.

Zitat:
hast du's schonma mit nem normalen Per-Pixel-Beleuchtungs-Shader versucht? Wenn es da genau so aussieht muss es was anderes sein...

Das Punktlicht funktioniert problemlos :wink:.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: So Jul 11, 2010 00:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Sehr seltsam :? Leigt die Ebene in der XZ-Ebene? Ich versuch ma das Problem zu reproduzieren.
€: Ok, bei mir kommt der Fehler auch, allerdings nur, wenn die Ebene in der XZ-Ebene liegt, wenn ich das ganze in die XY-Egbene verschiebe, geht alles 1a -.-
€2: ich weiß jetzt, das es iwie an der Berechnung von G scheitert, ich komm aber beim besten Willen nicht weiter. Da mein Quad in der XY-Ebene gelegen hat, hat die Ableitung von X und Y funktioniert. Eine Ableitung von Z gibts es aber nicht. Dann hab ich versucht die Ableitungen einfach zu vertauchen, das geht aber auch nicht. Wir brauchen jetzt ne Idee, wie man G (oder gleich B) anders berechnen kann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: So Jul 11, 2010 09:25 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Ah stimmt, bei dem Shader geht das ja nur bei Wänden, also X und Y.
Moeglich muss es aber irgentwie sein oder? Ich hab einen anderen Shader gefunden der zu funktionieren scheint:

http://xyross.de/file.php?id=63 (Dateien ersetzen)

Ich bin mir nicht sicher aber es scheint so als ob der Shader den "Schatten" in genau die falsche Richtung schlägt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: So Jul 11, 2010 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

jetzt schmiert die exe mit ner Zugriffsverletzung ab ^^
Bei dem Shader musst du aber die Tangente als Attribut übergeben, oder? Der Stand glaube auch mit in dem alten Topic von mit. Der war von Sellmann wenn ich mich nich täusche. Aber da soll auch irgend ein Fehler drin gewesen sein (siehe hier).

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Mo Jul 12, 2010 08:31 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Habe das auch mal mittels dfdx/y versucht.
Bin dann nach mehrfachem Scheitern auf diesen Artikel gestossen. Leider auch ohne Erfolg. Vielleicht schaffst du es.

Schliesslich habe ich den Color Wert missbraucht und dort die vorausberechnete Tangente gespeichert. Erspart die Attribute und Farbe pro Vertex brauche ich so gut wie nie.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Mo Jul 12, 2010 10:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das sieht vielversprechend aus, ich versuch mich später ma dran, erstma muss ich zur Prüfung -.-
Wünscht mir Glück :D

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.012s | 17 Queries | GZIP : On ]