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

Aktuelle Zeit: Fr Mai 24, 2024 00:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit Licht
BeitragVerfasst: Di Okt 11, 2011 21:16 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Hey Leute :)

Bevor ich Shader genutzt habe, hatte ich eine einfache Lichtquelle in meiner Scene wodurch sich die Objekte hell bzw. dunkel gefärbt haben, je nach dem ob die Seite des Objekts zur Lichtquelle zeigt oder eben nicht. Sobald ich nun aber einen eigenen Shader benutze - der gut funktioniert - wird die Lichtquelle nicht mehr beachtet.
Woran liegt das und wie kann man das beheben?

Hoffe mal man muss das jetzt nicht alles selber in einem Shader berechnen :roll: Wär zwar nicht so kompliziert aber naja, gibts ja eigentlich schon in OGL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Di Okt 11, 2011 21:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Hoffe mal man muss das jetzt nicht alles selber in einem Shader berechnen :roll: Wär zwar nicht so kompliziert aber naja, gibts ja eigentlich schon in OGL.

Das ist ja gerade der Sinn von Shadern, das du Dinge wie die Lichtberechnung selbst machen kannst. So gibt es keinerlei Einschränkungen. Licht ohne Shader ist unflexibel da nur 8 Lichtquellen, keine Normalmaps/Bumpmapping, etc. Des weiteren findet die Berechnung nur pro Vertex statt. Im Shader kann man dies auch leicht pro Fragment machen! Insbesondere für Specular-Licht brauchen runde Objekte extrem viele Vertices, wenn sie ohne Shader gut aussehen sollen.

In der Shadersammlung gibt es gleich zwei Per Pixel-Beleuchtungs-Shader zur Auswahl:
http://wiki.delphigl.com/index.php/Shad ... d_Texturen

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Mi Okt 12, 2011 11:38 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Jop stimmt, dass macht durchaus Sinn :D
Danke für die Info und dem Link :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Mi Okt 12, 2011 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
hier noch nen witziger shader den ich mal geschrieben hatte
ist zwar nicht schön aber ich denke man versteht das prinzip dahinter :P

Code:
  1.  
  2. !!ARBfp1.0
  3. OPTION ARB_precision_hint_nicest;
  4. OPTION NV_fragment_program2;
  5.  
  6.  
  7. # texture 0 is the cube map
  8. # texture 1 is the per-surface bump map
  9. # texture 2 is the light falloff texture
  10. # texture 3 is the light projection texture
  11. # texture 4 is the per-surface diffuse map
  12. # texture 5 is the per-surface specular map
  13. # texture 6 is the specular lookup table
  14.  
  15. # env[0] is the diffuse modifier
  16. # env[1] is the specular modifier
  17.  
  18. TEMP    light,color, R1, R2, R3, R4,R5, localNormal, newtexcoord,view,RT,shd,shadow;
  19.  
  20. PARAM   shdmodi = 0.1;
  21. PARAM cmodi = {0.9,0.67,0.4,1};
  22. PARAM   subOne = { -1, -1, -1, -1 };
  23. PARAM   scaleTwo = { 2, 2, 2, 2 };
  24. PARAM const = { 0.06, 0.1, 0.5, 2.0 };
  25. DP3 light, fragment.texcoord[0], fragment.texcoord[0];
  26. RSQ light, light.w;
  27. MUL light.xyz, light.w, fragment.texcoord[0];
  28. DP3     view, fragment.texcoord[7], fragment.texcoord[7];
  29. RSQ     view, view.x;
  30. MUL     view, view.x, fragment.texcoord[7];
  31. SUB     R2.x, 1, -view.z;           # depth bias in R2.x
  32. MUL     R2.x, R2.x, R2.x;
  33. SUB     R2.x, 1, R2.x;
  34. RCP     R1.x, view.z;               # R1=1.0/view.z
  35. MUL     view.xy, view, const.x;     # view.xy*=depth
  36. MUL     view.xy, view, R2.x;        # view.xy*=depth_bias
  37. MUL     view, view, -R1.x;          # view*=-R1
  38. MUL     view, view, const.y;        # view/=10
  39. MOV     RT, fragment.texcoord[1];   # RT=texcoord
  40. MOV     RT.z, 1;                    # RT.z=1
  41. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  42. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  43. ADD     RT(GT.w), RT, view;         #   RT+=view;^
  44. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  45. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  46. ADD     RT(GT.w), RT, view;         #   RT+=view;
  47. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  48. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  49. ADD     RT(GT.w), RT, view;         #   RT+=view;
  50. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  51. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  52. ADD     RT(GT.w), RT, view;         #   RT+=view;
  53. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  54. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  55. ADD     RT(GT.w), RT, view;         #   RT+=view;
  56. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  57. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  58. ADD     RT(GT.w), RT, view;         #   RT+=view;
  59. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  60. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  61. ADD     RT(GT.w), RT, view;         #   RT+=view;
  62. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  63. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  64. ADD     RT(GT.w), RT, view;         #   RT+=view;
  65. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  66. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  67. ADD     RT(GT.w), RT, view;         #   RT+=view;
  68. TEX     R1, RT, texture[1], 2D;     # R1=tex(RT)
  69. SGTC    R3.w, RT.z, R1.z;           # if (RT.z>R1.w)
  70. ADD     RT(GT.w), RT, view;         #   RT+=view;
  71. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  72. MUL     view, view, const.z;            # view*=0.5
  73. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  74. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  75. SUB     RT, RT, view;                   # RT-=view;
  76. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  77. MUL     view, view, const.z;            # view*=0.5
  78. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  79. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  80. SUB     RT, RT, view;                   # RT-=view;
  81. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  82. MUL     view, view, const.z;            # view*=0.5
  83. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  84. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  85. SUB     RT, RT, view;                   # RT-=view;
  86. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  87. MUL     view, view, const.z;            # view*=0.5
  88. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  89. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  90. SUB     RT, RT, view;                   # RT-=view;
  91. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  92. MUL     view, view, const.z;            # view*=0.5
  93. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  94. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  95. SUB     RT, RT, view;                   # RT-=view;
  96. TEX     R1, RT, texture[1], 2D;         # R1=tex(RT)
  97. MUL     view, view, const.z;            # view*=0.5
  98. SGTC    R3.w, RT.z, R1.z;               # if (RT.z>R1.w)
  99. MAD     RT(GT.w), view, const.w, RT;    #   RT+=view*2;
  100. SUB     RT, RT, view;                   # RT-=view;
  101. MOV newtexcoord,RT;
  102. MOV shd,1.0;
  103. MOV RT,fragment.texcoord[1];
  104. TEX     R1, RT, texture[1], 2D;
  105. MOV RT.z,R1.z;       
  106. MOV R4,R1.z;
  107. MOV shadow,shdmodi;
  108. MAD RT,light,0.004,RT;
  109. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  110. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  111. MOV shd(GT.w),shadow;               #shd = 0.0
  112. MAD RT,light,0.004,RT;
  113. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  114. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  115. MOV shd(GT.w),shadow;               #shd = 0.0
  116. MAD RT,light,0.004,RT;
  117. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  118. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  119. MOV shd(GT.w),shadow;               #shd = 0.0
  120. MAD RT,light,0.004,RT;
  121. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  122. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  123. MOV shd(GT.w),shadow;               #shd = 0.0
  124. MAD RT,light,0.004,RT;
  125. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  126. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  127. MOV shd(GT.w),shadow;               #shd = 0.0
  128. MAD RT,light,0.004,RT;
  129. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  130. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  131. MOV shd(GT.w),shadow;               #shd = 0.0
  132. MAD RT,light,0.004,RT;
  133. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  134. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  135. MOV shd(GT.w),shadow;               #shd = 0.0
  136. MAD RT,light,0.004,RT;
  137. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  138. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  139. MOV shd(GT.w),shadow;               #shd = 0.0
  140. MAD RT,light,0.004,RT;
  141. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  142. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  143. MOV shd(GT.w),shadow;               #shd = 0.0
  144. MAD RT,light,0.004,RT;
  145. TEX     R1, RT, texture[1], 2D;     #R1 = tex(RT)
  146. SGTC    R3.w, R1.z, RT.z;       #if(R1.z > RT.z)
  147. MOV shd(GT.w),shadow;               #shd = 0.0
  148.  
  149. MUL     R4.xyz,cmodi,program.env[0];
  150. # modulate by the light projection
  151. TXP R1, fragment.texcoord[3], texture[3], 2D;
  152. MUL R4, R4, R1;
  153.  
  154. # modulate by the light falloff
  155. TXP R1, fragment.texcoord[2], texture[2], 2D;
  156. MUL R4, R4, R1;
  157.  
  158. MUL R4,R4,shd;
  159.  
  160.  
  161. TEX color,newtexcoord, texture[4], 2D;
  162. MUL color,color,R4;
  163.  
  164. MUL result.color.xyz, color, fragment.color;
  165.  
  166.  
  167. END
  168.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Mi Okt 12, 2011 22:01 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
In was ist das geschrieben?
Ich dachte Shader werden in einer C Artigen Synthax geschrieben. Das ist aber Asembler.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Mi Okt 12, 2011 22:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Neben GLSL kannst du Shader auch in Assembler schreiben. GLSL gibt es auch erst seit Shader 2.0, vorher gab es nur Assembler. Die Nutzung von Assembler macht eigentlich nur Sinn wenn man (aus welchem Grund auch immer) Shader automatisch per Software erzeugt (etwa automatische Übersetzung von einer anderen Sprache) oder ganz ganz neue Features nutzen will (*)....oder wenn man mit einem alten Treiber hantiert der noch kein GLSL kann ;)

Bei den Extensions handelt es sich um die Extensions die nicht "shader" im Namen haben sondern "program". Also beispielsweise GL_ARB_vertex_program, GL_ARB_fragment_program, GL_NV_gpu_program5, etc...


(*) ist ne Vermutung, aber es wäre möglich das die Treiber das eher unterstützen...da man aber eh auch die nötige Hardware braucht ist das wohl witzlos...

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Mi Okt 12, 2011 23:04 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Oh Gott ASM.
Habs in der Uni gelernt aber letztendlich ist mir das alles zu aufwendig und die Codes ziehen sich einfach zu doll in die Länge und werden unübersichtlich^^
Teilweise macht asm spaß aber nicht auf Dauer :lol:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Licht
BeitragVerfasst: Do Okt 13, 2011 08:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Coolcat hat geschrieben:
Neben GLSL kannst du Shader auch in Assembler schreiben. GLSL gibt es auch erst seit Shader 2.0, vorher gab es nur Assembler. Die Nutzung von Assembler macht eigentlich nur Sinn wenn man (aus welchem Grund auch immer) Shader automatisch per Software erzeugt (etwa automatische Übersetzung von einer anderen Sprache) oder ganz ganz neue Features nutzen will (*)....oder wenn man mit einem alten Treiber hantiert der noch kein GLSL kann ;)

Bei den Extensions handelt es sich um die Extensions die nicht "shader" im Namen haben sondern "program". Also beispielsweise GL_ARB_vertex_program, GL_ARB_fragment_program, GL_NV_gpu_program5, etc...


(*) ist ne Vermutung, aber es wäre möglich das die Treiber das eher unterstützen...da man aber eh auch die nötige Hardware braucht ist das wohl witzlos...


in kurz: wir sind im Bereich der Sublimierung :P

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]