我剛剛開始工作(它看起來工作得非常快)雷射系統可以製作基本的照明(像demo demo這樣工作:http://www.redblobgames.com/articles/visibility/)。它可以像我想要的那樣工作,但是當我設置每個頂點距離玩家/光源的點亮區域時,它的插值非常糟糕,例如,如果我想在遠處修剪光線/陰影到X,我沒有但圓形和多邊形/正方形之間的東西。圖片應該解釋。OpenGL GLSL基本雷電距離插值精度不高(2D)
此外 - 我用它爲我的3D項目(遊戲)與自上而下的相機,如果有關係。 (見下圖)。算法效果很好,不需要在shadders本身上工作,而是在其上繪製簡單的空間。 (無裁剪等)
這裏是我的頂點着色器:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace; //vertex's position
layout(location = 1) in vec3 Normal; //normal, currently not used, but added for future
layout(location = 2) in vec2 vertexUV; //texture coords, used and works ok
out vec2 UV; //here i send tex coords
out float intensity; //and this is distance from light source to current vertex (its meant to be interpolated to FS)
uniform mat4 MVP; //mvp matrix
uniform vec2 light_pos; //light-source's position in 2d
void main(){
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
UV = vertexUV;
intensity = distance(light_pos, vertexPosition_modelspace.xz); //distance between two vectors
}
這裏是我的片段着色器:
#version 330 core
in vec2 UV; //tex coords
in float intensity; //distance from light source
out vec4 color; //output
uniform sampler2D myTextureSampler; //texture
uniform float Opacity; //opacity of layer, used and works as expected (though to be change in near future)
void main() {
color = texture(myTextureSampler, UV);
color.rgba = vec4(0.0, 0.0, 0.0, 0.5);
if(intensity > 5)
color.a = 0;
else
color.a = 0.5;
}
此代碼應該給我很好的FOV的圓修剪,而是我得到這樣的東西:
我不知道它爲什麼工作,因爲它的工作...
另外,不要介意紋理和模型,它只是當時我在其他更重要的東西上工作的時間。當我完成更緊迫的事情時,我會填補這一點,我希望有一位朋友會幫助我,因爲我吸收這種東西;) – RippeR
我們在圖片中看到了什麼?灰色的alpha覆蓋了一個新的多邊形還是與背景中的頂點相同,只是由着色器變暗了?如果它是一個新的多邊形(我認爲是這樣),也許你的閾值5太大了。 –
如果我通過片段着色器中的距離東西來關閉剪輯,我會得到標準的[THIS](http://i.imgur.com/fOSixFg.png)。我簡單地使用光線投射來獲得二維空間中的點(從3D空間,我不在乎OY在這裏),從中我可以創建多邊形(或使用三角形扇),這是從這個評論的圖片較暗。如果我只爲這個較暗的多邊形使用特殊着色器,併爲它提供光源/播放器的位置,我想讓那個較暗的效果慢慢消失(因此我計算方向)。不幸的是,它看起來不像內插太好,正如主帖中的圖片所示。 – RippeR