Opengl GLSL中的圆绘制在错误的位置

Opengl GLSL中的圆绘制在错误的位置,opengl,glsl,shader,shapes,fragment-shader,Opengl,Glsl,Shader,Shapes,Fragment Shader,所以,我在glsl中有一个圆圈,应该画在鼠标周围。生成的圆绘制在错误的位置 我用距离st的步长和均匀鼠标的矢量2画圆 我不知道为什么会这样 #ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; void main() { vec2 st = gl_FragCoord.xy/u_resolution.xy;

所以,我在glsl中有一个圆圈,应该画在鼠标周围。生成的圆绘制在错误的位置

我用距离st的步长和均匀鼠标的矢量2画圆

我不知道为什么会这样

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main() {
    vec2 st = gl_FragCoord.xy/u_resolution.xy;
    st.x *= u_resolution.x/u_resolution.y;
    float pct = 0.0;
    vec2 brightness = vec2(0.0);
    
    pct = step(distance(st,vec2(u_mouse/100.0)),0.5);

    vec3 color = vec3(0.);
    color = vec3(pct);
    
    brightness = vec2(1.0);

    gl_FragColor = vec4(color,brightness);
}

    #ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main() {
    vec2 st = gl_FragCoord.xy/u_resolution.xy;
    st.x *= u_resolution.x/u_resolution.y;
    float pct = 0.0;
    vec2 brightness = vec2(0.0);
    
    pct = step(distance(st,vec2(u_mouse/100.0)),0.5);

    vec3 color = vec3(0.);
    color = vec3(pct);
    
    brightness = vec2(1.0);

    gl_FragColor = vec4(color,brightness);
}

代码是偶然复制的吗?我会检查您是否正在传递鼠标和分辨率的预期值,并考虑您的窗口是否为全屏。

这里是一个使用Shadertoy的示例,可以简单地适应OpenGL/GLSL代码

该代码来自Shadertoy的一个基本2D教程,该教程介绍了如何围绕屏幕中心绘制一个圆,方法是根据像素是否位于距其中心的给定笛卡尔距离(即其半径)内对其着色。然后将其修改为围绕鼠标指针绘制圆:

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2  m  = (iMouse.xy / iResolution.xy);
    vec2  uv = (fragCoord.xy / iResolution.xy);
    uv.x *= iResolution.x/iResolution.y;
    m.x *= iResolution.x/iResolution.y;
    float radius = 0.25;
    
    vec3 pixel;
    if( (uv.x-m.x)*(uv.x-m.x) + (uv.y-m.y)*(uv.y-m.y) < radius*radius ) {
        pixel = vec3(0.3, 0.3, 1.0);
    } else {
        pixel = vec3(1.0, 0.3, 0.2);   
    }

    fragColor = vec4(pixel, 1.0);
}
void主图像(输出vec4 fragColor,输入vec2 fragCoord)
{
vec2 m=(iMouse.xy/iResolution.xy);
vec2 uv=(fragCoord.xy/iResolution.xy);
uv.x*=iResolution.x/iResolution.y;
m、 x*=iResolution.x/iResolution.y;
浮动半径=0.25;
vec3像素;
如果((uv.x-m.x)*(uv.x-m.x)+(uv.y-m.y)*(uv.y-m.y)<半径*半径){
像素=vec3(0.3,0.3,1.0);
}否则{
像素=vec3(1.0,0.3,0.2);
}
fragColor=vec4(像素,1.0);
}
演示:


@AaronSpeedy不客气!对非常感谢。成功了。我从未想过使用if语句。再次感谢:)