Fel fel fel då loopar används i GLSL

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1

Tjena,

Försöker få till dynamiska loopar i GLSL. Med dynamiskt menar jag att antalet vändor i loopen beror på gl_FragCoord.z. Jag har ett GeForce 6800 GT- kort, så ShaderModel 3.0 är stött och därmed dynamiska loopar. Eller?

Har provat for, while och do- loopar, men inget funkar. Fattar inte...
Tacksam för svar!

//DB

  • Medlem
  • Sollentuna
  • 2006-03-06 21:04

Kanske lite kod...

  • Medlem
  • Uppsala
  • 2006-03-07 12:08

Har du kontrollerat kompilator outputen från GLSL?
Det kanske är så att den inte kan göra en loop baserad på gl_FragCoord.z t ex.
Sedan vilken version av OS X kör du? Du måste ha minst 10.4.3, för att GLSL ska fungera öht.

Koden...

colorCont = 0.3; // default color value
currentZ= gl_FragCoord.z; // z-value of the object-pixel

// if object-pixel is right behind "the cone". texture_back and texture_front are two depthmaps
if ((currentZ >= texture_back.x ) && (currentZ >= texture_front.x )) {

//************HÄR BUGGAR DET UT!!!************************
while(currentZ>0.0) {
currentZ-=0.05;
colorCont+=0.01;
}
//********************************************************

lightColor = vec4(colorCont+0.1,0.0,colorCont+0.1,1); // color of the "cone light"

}

Jag kör 10.4.5 med en GeForce 6800 GT.

En till fråga...

1) Ger "gl_FragCoord.z" ett djupvärde mellan [0,1] eller måste man ta "gl_FragCoord.z*gl_FragCoord.w" för att få det?

2) Jag antar att djupmappen skapad i openGL-applikationen har djuvärden mellan [0,1] då jag specifiserat:
"glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, depthMapSize, depthMapSize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);" ???

1
Bevaka tråden