Welcome on MasterOf13FPS! MasterOf13FPS

Register today or sign up if you are already a member and never miss any cool content again :)

Scoreboard Blur

baba31

New member
Joined
Jul 27, 2023
Messages
1
Reaction score
0
Points
0
I want to blur my scoreboard but I can't do it and I don't have a shaderevent can you send me a blur for it
 
Es gibt eigentlich nur einen vernünftigen weg, mit shadern.
Zunächst brauchst du einen shaderloader der den shader von einer file lädt -> vertex & blur shader.

Den vertex shader kannst du als art "herz" deines shaders ansehen, er verarbeitet positionen und verarbeitet die vertices.

Hier ist ein beispiel:
C-like:
#version 120

varying vec4 posPos;

void main() {
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

Als nächstes ist der blur shader dran.
Auf dieser website findest du eine gute erklärung zu diesem:

Hier ist eine simple umsetzung des shaders auf der website für glsl 2.0 welches die meisten im "minecraft cheating bereich" noch nutzen

C-like:
uniform sampler2D tex0;

uniform vec2 centreUV;

uniform vec2 halfPixelOffset;

uniform vec2 pixelOffset;

uniform float gWeights[2];

uniform float gOffsets[2];



void main() {

    vec3 colOut = vec3(0.0, 0.0, 0.0);

    for(int i = 0; i < 2; i++) {

        vec2 texCoordOffset = gOffsets[i] * pixelOffset;

        vec3 col = texture2D(tex0, centreUV + texCoordOffset).xyz

               + texture2D(tex0, centreUV - texCoordOffset).xyz;

        colOut += gWeights[i] * col;

    }

    gl_FragColor = vec4(colOut, 1.0);

}

Du brauchst eine methode womit du framebuffer rendern kannst, schau doch mal in die Framebuffer class von minecraft -> "framebufferRenderExt".

Java:
     GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            this.bindFramebufferTexture();
            float f = (float)p_178038_1_;
            float f1 = (float)p_178038_2_;
            float f2 = (float)this.framebufferWidth / (float)this.framebufferTextureWidth;
            float f3 = (float)this.framebufferHeight / (float)this.framebufferTextureHeight;
            Tessellator tessellator = Tessellator.getInstance();
            WorldRenderer worldrenderer = tessellator.getWorldRenderer();
            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
            worldrenderer.pos(0.0D, (double)f1, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, (double)f1, 0.0D).tex((double)f2, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, 0.0D, 0.0D).tex((double)f2, (double)f3).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos(0.0D, 0.0D, 0.0D).tex(0.0D, (double)f3).color(255, 255, 255, 255).endVertex();
            tessellator.draw();
            this.unbindFramebufferTexture();
            GlStateManager.depthMask(true);
            GlStateManager.colorMask(true, true, true, true);

Danach brauchst du eine methode zum rendern des shaders, jetzt ist die frage wie du das machen möchtest, möchtest du den framebuffer samplen worauf du den shader bindest, oder ihn simple stenciln.

gehen wir mal vom simpleren aus, da du es ja sowieso nur für den scoreboard nutzen möchtest, dafür brauchst du erstmal eine class womit du stenciln kannst.


Ich verweise zum rendern des shaders mal auf einen source leak da ich simple keine lust hab das jetzt alles einzelnd zu erklären, sehr schreckliche umsetzung btw.


Und jetzt noch wie du mithilfe des blur shaders und stencil den blur auf den scoreboard renderst.
Java:
  //Scoreboard section
  
        ScoreObjective scoreobjective1 = scoreobjective != null ? scoreobjective : scoreboard.getObjectiveInDisplaySlot(1);
  
        //Stencil init
        if (scoreobjective1 != null) {
            this.renderScoreboard(scoreobjective1, scaledresolution);
        }
  
        //Read stencil
        //Render blur shader
        //End stencil
  
        //Render scoreboard

Falls ich irgendwo schwachfug laber bitte sagt es mir xoxo
 
Last edited:
Es gibt eigentlich nur einen vernünftigen weg, mit shadern.
Zunächst brauchst du einen shaderloader der den shader von einer file lädt -> vertex & blur shader.

Den vertex shader kannst du als art "herz" deines shaders ansehen, er verarbeitet positionen und verarbeitet die vertices.

Hier ist ein beispiel:
C-like:
#version 120

varying vec4 posPos;

void main() {
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

Als nächstes ist der blur shader dran.
Auf dieser website findest du eine gute erklärung zu diesem:

Hier ist eine simple umsetzung des shaders auf der website für glsl 2.0 welches die meisten im "minecraft cheating bereich" noch nutzen

C-like:
uniform sampler2D tex0;

uniform vec2 centreUV;

uniform vec2 halfPixelOffset;

uniform vec2 pixelOffset;

uniform float gWeights[2];

uniform float gOffsets[2];



void main() {

    vec3 colOut = vec3(0.0, 0.0, 0.0);

    for(int i = 0; i < 2; i++) {

        vec2 texCoordOffset = gOffsets[i] * pixelOffset;

        vec3 col = texture2D(tex0, centreUV + texCoordOffset).xyz

               + texture2D(tex0, centreUV - texCoordOffset).xyz;

        colOut += gWeights[i] * col;

    }

    gl_FragColor = vec4(colOut, 1.0);

}

Du brauchst eine methode womit du framebuffer rendern kannst, schau doch mal in die Framebuffer class von minecraft -> "framebufferRenderExt".

Java:
     GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            this.bindFramebufferTexture();
            float f = (float)p_178038_1_;
            float f1 = (float)p_178038_2_;
            float f2 = (float)this.framebufferWidth / (float)this.framebufferTextureWidth;
            float f3 = (float)this.framebufferHeight / (float)this.framebufferTextureHeight;
            Tessellator tessellator = Tessellator.getInstance();
            WorldRenderer worldrenderer = tessellator.getWorldRenderer();
            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
            worldrenderer.pos(0.0D, (double)f1, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, (double)f1, 0.0D).tex((double)f2, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, 0.0D, 0.0D).tex((double)f2, (double)f3).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos(0.0D, 0.0D, 0.0D).tex(0.0D, (double)f3).color(255, 255, 255, 255).endVertex();
            tessellator.draw();
            this.unbindFramebufferTexture();
            GlStateManager.depthMask(true);
            GlStateManager.colorMask(true, true, true, true);

Danach brauchst du eine methode zum rendern des shaders, jetzt ist die frage wie du das machen möchtest, möchtest du den framebuffer samplen worauf du den shader bindest, oder ihn simple stenciln.

gehen wir mal vom simpleren aus, da du es ja sowieso nur für den scoreboard nutzen möchtest, dafür brauchst du erstmal eine class womit du stenciln kannst.


Ich verweise zum rendern des shaders mal auf einen source leak da ich simple keine lust hab das jetzt alles einzelnd zu erklären, sehr schreckliche umsetzung btw.


Und jetzt noch wie du mithilfe des blur shaders und stencil den blur auf den scoreboard renderst.
Java:
  //Scoreboard section
 
        ScoreObjective scoreobjective1 = scoreobjective != null ? scoreobjective : scoreboard.getObjectiveInDisplaySlot(1);
 
        //Stencil init
        if (scoreobjective1 != null) {
            this.renderScoreboard(scoreobjective1, scaledresolution);
        }
 
        //Read stencil
        //Render blur shader
        //End stencil
 
        //Render scoreboard

Falls ich irgendwo schwachfug laber bitte sagt es mir xoxo
sehr gute erklärung, schön das es noch leute auf dem forum gibt die mehr als 2 gehirnzellen haben.
 
Es gibt eigentlich nur einen vernünftigen weg, mit shadern.
Zunächst brauchst du einen shaderloader der den shader von einer file lädt -> vertex & blur shader.

Den vertex shader kannst du als art "herz" deines shaders ansehen, er verarbeitet positionen und verarbeitet die vertices.

Hier ist ein beispiel:
C-like:
#version 120

varying vec4 posPos;

void main() {
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

Als nächstes ist der blur shader dran.
Auf dieser website findest du eine gute erklärung zu diesem:

Hier ist eine simple umsetzung des shaders auf der website für glsl 2.0 welches die meisten im "minecraft cheating bereich" noch nutzen

C-like:
uniform sampler2D tex0;

uniform vec2 centreUV;

uniform vec2 halfPixelOffset;

uniform vec2 pixelOffset;

uniform float gWeights[2];

uniform float gOffsets[2];



void main() {

    vec3 colOut = vec3(0.0, 0.0, 0.0);

    for(int i = 0; i < 2; i++) {

        vec2 texCoordOffset = gOffsets[i] * pixelOffset;

        vec3 col = texture2D(tex0, centreUV + texCoordOffset).xyz

               + texture2D(tex0, centreUV - texCoordOffset).xyz;

        colOut += gWeights[i] * col;

    }

    gl_FragColor = vec4(colOut, 1.0);

}

Du brauchst eine methode womit du framebuffer rendern kannst, schau doch mal in die Framebuffer class von minecraft -> "framebufferRenderExt".

Java:
     GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            this.bindFramebufferTexture();
            float f = (float)p_178038_1_;
            float f1 = (float)p_178038_2_;
            float f2 = (float)this.framebufferWidth / (float)this.framebufferTextureWidth;
            float f3 = (float)this.framebufferHeight / (float)this.framebufferTextureHeight;
            Tessellator tessellator = Tessellator.getInstance();
            WorldRenderer worldrenderer = tessellator.getWorldRenderer();
            worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
            worldrenderer.pos(0.0D, (double)f1, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, (double)f1, 0.0D).tex((double)f2, 0.0D).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos((double)f, 0.0D, 0.0D).tex((double)f2, (double)f3).color(255, 255, 255, 255).endVertex();
            worldrenderer.pos(0.0D, 0.0D, 0.0D).tex(0.0D, (double)f3).color(255, 255, 255, 255).endVertex();
            tessellator.draw();
            this.unbindFramebufferTexture();
            GlStateManager.depthMask(true);
            GlStateManager.colorMask(true, true, true, true);

Danach brauchst du eine methode zum rendern des shaders, jetzt ist die frage wie du das machen möchtest, möchtest du den framebuffer samplen worauf du den shader bindest, oder ihn simple stenciln.

gehen wir mal vom simpleren aus, da du es ja sowieso nur für den scoreboard nutzen möchtest, dafür brauchst du erstmal eine class womit du stenciln kannst.


Ich verweise zum rendern des shaders mal auf einen source leak da ich simple keine lust hab das jetzt alles einzelnd zu erklären, sehr schreckliche umsetzung btw.


Und jetzt noch wie du mithilfe des blur shaders und stencil den blur auf den scoreboard renderst.
Java:
  //Scoreboard section
 
        ScoreObjective scoreobjective1 = scoreobjective != null ? scoreobjective : scoreboard.getObjectiveInDisplaySlot(1);
 
        //Stencil init
        if (scoreobjective1 != null) {
            this.renderScoreboard(scoreobjective1, scaledresolution);
        }
 
        //Read stencil
        //Render blur shader
        //End stencil
 
        //Render scoreboard

Falls ich irgendwo schwachfug laber bitte sagt es mir xoxo
danke felix
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top