OpenGL:带片段着色器的圆弧斜角?

时间:2016-12-03 11:10:43

标签: ios opengl-es opengl-es-2.0 fragment-shader

我试图制作一个圆形的颗粒,看起来它的顶部有一盏灯。

这就是我试图让它看起来像:

particle 1

现在看来是这样的:

enter image description here

不是很好。

由于我使用了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
}

如果有人可以给我一点帮助,我将非常感激,因为我感谢自己糟糕的数学技能。

1 个答案:

答案 0 :(得分:4)

您可以进行正确的完整照明计算。例如,朗伯漫反射就像:

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;