61
OpenGL / Odp: Deferred Shading kilka świateł
« dnia: Styczeń 08, 2012, 19:11:36 »
Nie za bardzo. W przypadku światła punktowego rysujesz sferę 3D, zamiast fullscreen quada. Ta sfera musi mieć takie same parametry (położenie i promień) jak światło. Kiedy będziesz liczył światło punktowe w Fragment shaderze, oprócz położeń wierzchołków potrzebujesz jeszcze współrzędnych TexCoordów, które liczy się tak jak w tutorialu, który ci podałem w linku:
Kod: [Zaznacz]
input.ScreenPosition.xy /= input.ScreenPosition.w; // input.ScreenPosition -
vec2 texCoord = 0.5f * (vec2(input.ScreenPosition.x,-input.ScreenPosition.y) + 1);
Czyli będzie coś takiego:Kod: [Zaznacz]
// Przebieg światła
LightRenderTarget->start(); //Rozpoczyna render do textury FBO.
UstawShaderDlaSwiatlaKierunkowego();
pętla po wszystkich światłach kierunkowych
{
PrzeslijInformacjeOSwietleDoShadera();
DrawFullscreenQuad();
}
UstawShaderDlaSwiatlaPunktowego();
pętla po wszystkich światłach punktowych
{
PrzeslijInformacjeOSwietleDoShadera();
DrawSphere(SpherePositon = LightPosition, SphereRadius = LightRadius);
}
LightRenderTarget->stop(); //Kończy render do textury FBO.
Analogicznie dla światła typu spot, tylko rysujesz stożek zamiast sfery