OpenGL:带片段着色器的圆斜角?
我正在试图制作一个圆形的粒子,看起来像是在它的顶部闪耀着光芒。OpenGL:带片段着色器的圆斜角?
这里就是我试图让它看起来像:
这里就是它现在的样子:
不是很好。
由于我使用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
}
我会非常感谢,如果有人能够给我一点帮助,因为我受困于自己可怕的数学技能而陷入困境。
您可以进行正确的全光照计算。例如,朗伯弥散可以像下面这样工作:
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;
哇......正是我以前的样子。有一件事,它在底部而不是顶部。我会尝试改变lightDir – MysteryPancake
好的,将y更改为-1就像我想要的那样工作! – MysteryPancake
只是还有一个问题 - 我并不特别需要一个简单的2D斜角的全光照计算。有没有办法将这个简化为我所需要的?我想要的只是顶部的一个小梯度,因为我用这个iOS应用程序,我需要它相当快 – MysteryPancake
您可以尝试从gl_PointCoord计算片段的法线,然后应用3D闪电计算。 – pleluron
我宁愿避免3D计算,因为这是一个在iOS上运行的2D应用程序......越快越好 – MysteryPancake