#version 120
varying vec4 posPos;
void main() {
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
}
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);
}
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);
//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
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 felixEs 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