ボクセルエンジンにポイントライトを実装していますが、光源の近くで100%から光の半径で0%まで、適切な光の流れを得るのに苦労しています。
関数には5つの引数があります。
- 明るい色(Vec3)
- 光の強度(光から減衰が100%になる距離までの距離)
- ライトからフラグメントまでの距離
- ライトに垂直なフラグメントからの角度
- ライトの位置
フラグメントの色を計算するための関数を作成するために、誰かが私を正しい方向に押すことができますか?
私の実験の1つの画像:
編集(Byteによって要求された現在のコード)これは私の側からの単なる実験コードであることに注意してください。私はウェブサイトからフロート属性を取得しましたが、それは動作しますが、完璧からはほど遠いです。:
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
リターン1の距離は9例:あるときの距離が0と0であることを機能でmix(1.0, 0.0, dist / 9.0)