如何规范化在glsl中绘制的圆,以使分辨率不';你不能伸展吗?

如何规范化在glsl中绘制的圆,以使分辨率不';你不能伸展吗?,glsl,shader,fragment-shader,Glsl,Shader,Fragment Shader,我正在尝试使用glsl创建一个围绕特定精灵的圆。但是,分辨率为矩形(800x600),这会导致一个略微拉伸的圆: 我尝试过这些答案,但我不知道如何正确地将它们应用到我的特定着色器。我需要做什么 #定义着色器_NAME SPOTLIGHT_FS 高精度浮点; 均匀取样器; 可变vec2-outTexCoord; //坐标是非标准化的位置,如果圆跟随精灵 统一向量2坐标; vec2px=vec2(1.0/800.0,1.0/600.0); 浮点getDistance(vec2像素坐标,vec2播放

我正在尝试使用glsl创建一个围绕特定精灵的圆。但是,分辨率为矩形(800x600),这会导致一个略微拉伸的圆:

我尝试过这些答案,但我不知道如何正确地将它们应用到我的特定着色器。我需要做什么

#定义着色器_NAME SPOTLIGHT_FS
高精度浮点;
均匀取样器;
可变vec2-outTexCoord;
//坐标是非标准化的位置,如果圆跟随精灵
统一向量2坐标;
vec2px=vec2(1.0/800.0,1.0/600.0);
浮点getDistance(vec2像素坐标,vec2播放器坐标){
//pixelCoord已规范化,但playerCoord按原样传入
返回距离(像素坐标、播放坐标*px);
}
真空总管(真空)
{
如果(getDistance(outTexCoord,coord)>0.125){
gl_FragColor=vec4(0.0,0.0,0.0,1.0);
}
否则{
gl_FragColor=纹理2D(uMainSampler,outTexCoord);
}
}

> p>你必须考虑视口的宽高比。例如:

vec2px=vec2(1.0/800.0,1.0/600.0);
浮动方向=800.0/600.0;
浮点getDistance(vec2像素坐标,vec2播放器坐标){
vec2p=playerCoord*px*vec2(1.0,1.0/纵横比);
//pixelCoord已规范化,但playerCoord按原样传入
返回距离(像素坐标,p);
}
或者,您可以以像素为单位计算距离:

vec2分辨率=vec2(800.0600.0);
浮动半径=100.0;//像素半径
浮点getDistance(vec2像素坐标,vec2播放器坐标){
返回距离(像素坐标*分辨率,播放坐标);
}
真空总管(真空)
{
if(getDistance(outTexCoord,coord)>半径){
gl_FragColor=vec4(0.0,0.0,0.0,1.0);
}
否则{
gl_FragColor=纹理2D(uMainSampler,outTexCoord);
}
}