昨日に引き続き、今日は円の半径に伴いアルファ値が変わるようにシェーダを調整しました。
#version 330 core
out vec4 Color;
void main()
{
vec3 target;
target.xy = (gl_PointCoord - 0.5) * 2.0; // 座標値変換 (0, 1) -> (-1, 1)
float r2 = target.x * target.x + target.y * target.y; // 半径の2乗
if (1.0 < r2) {
discard;
}
Color = vec4(0.0f, 0.0f, 1.0f, 0.4 * (1.0 - r2));
}
これだけですが効果は抜群で、水分子画像を使わずにシェーダだけで事が済んでしまいました。むしろ水分子画像を拡大したときはシェーダの方が綺麗に描画できます。
そして気になるパフォーマンスですが、画像を使わずにシェーダだけで描画したほうが、1FPSだけですが上回りました。(1億と1000万ポイント描画時に計測)
せっかくGIMPで一生懸命?作りましたが、シェーダ方式を採用することにしました。透明度や色、様々なエフェクトなどシェーダの方が自由度も高いですしね。