OpenGL:使用片段着色器绘制圆弧斜角?

神秘煎饼

我正在尝试制作一个圆形的粒子,看起来上面有一个光。

这就是我想要使它看起来像的样子:

粒子1

这是当前的样子:

在此处输入图片说明

不太好。

由于我使用的是GL_POINTS,因此我得到了gl_PointCoord变量,这会使事情变得更容易,但我不知道如何正确使用它,这会导致混乱:

varying lowp vec4 DestinationColor;

void main(void) {
  lowp vec2 circCoord = 2.0 * gl_PointCoord - 1.0;
  if (dot(circCoord, circCoord) > 1.0) {
    discard;
  }
  gl_FragColor = mix(DestinationColor, vec4(1, 0.5, 0.2, 1), (1.0-gl_PointCoord.t)*(max(abs(gl_PointCoord.t-0.5),abs(gl_PointCoord.s-0.5)))); // the world's worst slowest math
}

如果有人可以帮助我,我将不胜感激,因为我自己的糟糕数学技能使我陷入困境。

雅科夫·加尔卡(Yakov Galka)

您可以进行正确的全光照计算。例如,一个朗伯散射体的工作方式如下:

const vec3 lightDir = normalize(vec3(0, 1, -0.5));
const vec3 ambient = ...;
const vec3 lightDiffuse = ...;

vec3 normal = vec3(circCoord, sqrt(1 - dot(circCoord, circCoord)));
float c = max(dot(normal, lightDir), 0);
gl_FracColor = ambient + lightDiffuse*c;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章