Voxel 엔진에서 포인트 라이트를 구현하고 있으며 광원 근처에서 100 %에서 빛 반경에서 0 %까지 좋은 빛의 흐름을 얻기 위해 고심하고 있습니다.
함수에 대한 5 개의 인수가 있습니다.
- 연한 색 (Vec3)
- 빛의 강도 (감쇠가 100 % 인 거리까지 빛으로부터의 거리)
- 빛에서 조각까지의 거리
- 파편 법선에서 빛까지의 각도
- 빛의 위치
누구든지 올바른 방향으로 밀어서 조각 색상 계산 기능을 만들 수 있습니까?
내 실험 중 하나의 이미지 :
편집 (Byte가 요청한 현재 코드) 이것은 내 측면의 실험 코드 일뿐입니다. 나는 웹 사이트에서 float att를 얻었고 종류는 작동하지만 완벽하지는 않습니다. :
void main()
{
// Light color
vec3 torchColor = vec3(1.0f, 1.0f, 1.0f);
float lightAdd = 0.0f;
for (int i=0; i<5; i++) {
vec3 pos = lights[i];
if (pos.x == 0.0f) continue;
float dist = distance(vertex_pos, pos);
if (dist < 9) {
float att=1.0/(1.0+0.1*dist+0.01*dist*dist);
vec3 surf2light = normalize(pos - vertex_pos);
vec3 norm = normalize(normal);
float dcont=max(0.0,dot(norm,surf2light));
lightAdd += att*(dcont+0.4);
}
}
vec3 textureColor = texture2D(texture, texture_coordinate).rgb;
vec3 torch_output = lightAdd * torchColor;
vec3 final_color = ((0.1+torch_output) * textureColor);
gl_FragColor = vec4(final_color, 1.0f);
}
if (dist < 9)
? 또는 당신은 계산할 수있는 att
거리가 9 예 때 거리가 0, 0 일 때 반환 한하는 기능mix(1.0, 0.0, dist / 9.0)