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

Aktuelle Zeit: So Jul 13, 2025 23:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Bumpmapping
BeitragVerfasst: Di Jul 13, 2010 00:52 
Offline
DGL Member
Benutzeravatar

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

Prüfung vorbei (2.0^^) und auch der BumpmapShader läuft einwandfrei (soweit ich das erkennen kann). In dem Artikel wurden einfach die Vektoren berechnet, die in dem Quad liegen (also die Tangente un die Bitangente, bzw. S und T) daraus hab ich dann einfach ne Matrix gemacht und mit der Normale aus der Normalmap verrechnet, aber seht selbst:
Code:
//Vertex
const int LIGHT_COUNT = 3;
varying vec3 N;
varying vec3 V;
varying vec3 lightvec[8];
void main(void)
{
   gl_TexCoord[0]  = gl_MultiTexCoord0;
   N                = normalize(gl_NormalMatrix * 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;
}
//end

//Fragment
const int LIGHT_COUNT = 1;
const float PI = 3.14159265;
varying vec3 N;
varying vec3 V;
varying vec3 lightvec[LIGHT_COUNT];
uniform sampler2D Texture0;
uniform sampler2D Texture1;

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 Eye = normalize(-V);

   vec3 q0 = dFdx(Eye.xyz);
   vec3 q1 = dFdy(Eye.xyz);
   vec2 st0 = dFdx(TexCoord.st);
   vec2 st1 = dFdy(TexCoord.st);
   
   vec3 S = normalize( q0 * st1.t - q1 * st0.t);
   vec3 T = normalize(-q0 * st1.s + q1 * st0.s);
   
   mat3 M = mat3(-T, -S, N);
   vec3 normal = normalize(M * (vec3(texture2D(Texture1, TexCoord)) - vec3(0.5, 0.5, 0.5)));
   
   vec4 EndColor = vec4(0.0, 0.0, 0.0, 0.0);
   vec4 EndSpec  = vec4(0.0, 0.0, 0.0, 0.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  * gl_FrontMaterial.diffuse  * max(dot(normal, lightvec[i]), 0.0);
      vec4 ISpecular = gl_LightSource[i].specular * gl_FrontMaterial.specular * pow(max(dot(Reflected, Eye), 0.0), gl_FrontMaterial.shininess);
      EndColor += (IAmbient+IDiffuse);
      EndSpec  += ISpecular;
   }
   EndColor += gl_FrontMaterial.emission;

   gl_FragColor = (gl_FrontLightModelProduct.sceneColor + EndColor + EndSpec) * texture2D(Texture0, vec2(gl_TexCoord[0]));
}
//end


HIER ma noch 2 Anwendungen (ca. 5.5MB). Bei dem Sand kann man das Licht mir WASD, R und F verschieben, Kamera drehen mit der Maus+RMT und Zoom is Mausrad. Bei dem Affen is Kamera drehen Maus+RMT, Licht drehen is Maus+LMT und Licht "zoomen" is Mausrad.
Im Anhang is auch nochma der Shader zum Download. Viel Spaß damit ;)

MfG Bergmann.

p.s.: Wiki aktualisier ich auch gleich...


Dateianhänge:
bumpmap_shader.rar [731 Bytes]
342-mal heruntergeladen

_________________
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: Di Jul 13, 2010 03:11 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Mir ist da gerade noch was an dem ursprünglichen Shader aufgefallen:
Code:
vec3 normal = normalize((vec3(texture2D(Texture0, TexCoord)) - vec3(0.5, 0.5, 0.5)) * M);


Die Matrix gehört nach vorne:
Code:
vec3 normal = normalize( M * (vec3(texture2D(Texture0, TexCoord)) - vec3(0.5, 0.5, 0.5)));

_________________
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: Di Jul 13, 2010 15:47 
Offline
DGL Member
Benutzeravatar

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

das ist mir auch schon aufgefallen, aber das hatte das Problem nicht behoben. Den alten hab ich jetzt eh schon gelöscht, weil der neue ja besser funktioniert.

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 Vorherige  1, 2
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.008s | 15 Queries | GZIP : On ]