Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Help ShaderEsp

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Окт 2025
Сообщения
46
Реакции
0
хелпаните пыж шейдер есп норм не вставет на игрока я просто тот же силуэт но рядом
вот код база нуклир


package darama.module.impl.render;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import darama.control.events.Event;
import darama.control.events.impl.render.EventRender;
import darama.module.TypeList;
import darama.module.api.Annotation;
import darama.module.api.Module;
import darama.module.settings.imp.SliderSetting;
import darama.utils.render.ShaderUtils;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL30;

import java.awt.Color;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;

import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;
import static darama.ui.clickgui.Panel.getColorByName;

@Annotation(name = "ShaderEsp", type = TypeList.Render, desc = "Шейдерная обводка игроков")
public class ShaderEsp extends Module {

private final SliderSetting radius = new SliderSetting("Радиус", 4f, 1f, 12f, 1f);

private Framebuffer inFB, outFB;

private static final ShaderUtils blurC = new ShaderUtils("blur2c");

public ShaderEsp() {
addSettings(radius);
}

private Framebuffer ensureFB(Framebuffer fb) {
int w = mc.getFramebuffer().framebufferWidth;
int h = mc.getFramebuffer().framebufferHeight;
if (fb == null) {
fb = new Framebuffer(w, h, true, false);
} else if (fb.framebufferWidth != w || fb.framebufferHeight != h) {
fb.resize(w, h, false);
}
fb.setFramebufferColor(0f, 0f, 0f, 0f);
fb.framebufferClear(false);
return fb;
}

@override
public boolean onEvent(Event event) {
if (!(event instanceof EventRender render)) return false;
if (render.isRender3D()) onRender3D(render);
return false;
}

private void onRender3D(EventRender e) {
if (mc.world == null || mc.player == null) return;

List<PlayerEntity> targets = new ArrayList<>();
for (Entity entity : mc.world.getAllEntities()) {
if (!(entity instanceof PlayerEntity p)) continue;
if (!p.isAlive()) continue;
if (p == mc.player && mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) continue;
targets.add(p);
}
if (targets.isEmpty()) return;

int fbW = mc.getFramebuffer().framebufferWidth;
int fbH = mc.getFramebuffer().framebufferHeight;

inFB = ensureFB(inFB);
outFB = ensureFB(outFB);


inFB.bindFramebuffer(true);

MatrixStack stack = e.matrixStack;
float pt = e.getPartialTicks();
EntityRendererManager erm = mc.getRenderManager();
IRenderTypeBuffer.Impl buf = mc.getRenderTypeBuffers().getBufferSource();

erm.setRenderShadow(false);
for (PlayerEntity p : targets) {
erm.renderEntityStaticNoShadow(p, pt, stack, buf, erm.getPackedLight(p, pt));
}
buf.finish();
erm.setRenderShadow(true);


GlStateManager.matrixMode(5889);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.ortho(0.0, fbW, fbH, 0.0, 1000.0, 3000.0);
GlStateManager.matrixMode(5888);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.translatef(0f, 0f, -2000f);

int r = radius.getValue().intValue();
int col = getColorByName("primaryColor");
Color c = new Color(col, true);
float[] rgba = { c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, 1f };
float tw = 1f / fbW;
float th = 1f / fbH;

FloatBuffer weights = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= r; i++) {
weights.put(ShaderUtils.calculateGaussianValue(i, r / 2f));
}
weights.rewind();

GlStateManager.enableBlend();
GlStateManager.blendFunc(GL30.GL_ONE, GL30.GL_SRC_ALPHA);
GL30.glAlphaFunc(GL30.GL_GREATER, 0.0001f);


outFB.bindFramebuffer(true);
blurC.attach();
blurC.setUniformf("radius", r);
blurC.setUniformf("exposure", 2.5f);
blurC.setUniform("textureIn", 0);
blurC.setUniform("textureToCheck", 20);
blurC.setUniform("avoidTexture", 0);
blurC.setUniformf("color", rgba[0], rgba[1], rgba[2], rgba[3]);
glUniform1(blurC.getUniform("weights"), weights);
blurC.setUniformf("texelSize", tw, th);
blurC.setUniformf("direction", 1f, 0f);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
inFB.bindFramebufferTexture();
drawFBQuad(inFB);

// Pass 2: blur Y — outFB → main (avoidTexture убирает силуэт)
mc.getFramebuffer().bindFramebuffer(true);
GlStateManager.blendFunc(GL30.GL_SRC_ALPHA, GL30.GL_ONE_MINUS_SRC_ALPHA);
blurC.setUniformf("direction", 0f, 1f);
blurC.setUniform("avoidTexture", 1);
weights.rewind();
glUniform1(blurC.getUniform("weights"), weights);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
outFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
inFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE0);
drawFBQuad(outFB);

blurC.detach();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
GlStateManager.bindTexture(0);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
GlStateManager.bindTexture(0);
GlStateManager.disableBlend();


GlStateManager.matrixMode(5889);
GL11.glPopMatrix();
GlStateManager.matrixMode(5888);
GL11.glPopMatrix();
}

private void drawFBQuad(Framebuffer fb) {
float w = fb.framebufferWidth;
float h = fb.framebufferHeight;
float u2 = (float) fb.framebufferWidth / (float) fb.framebufferTextureWidth;
float v2 = (float) fb.framebufferHeight / (float) fb.framebufferTextureHeight;
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f); GL11.glVertex2f(0f, h);
GL11.glTexCoord2f(u2, 0f); GL11.glVertex2f(w, h);
GL11.glTexCoord2f(u2, v2); GL11.glVertex2f(w, 0f);
GL11.glTexCoord2f(0f, v2); GL11.glVertex2f(0f, 0f);
GL11.glEnd();
}
}
 

Вложения

  • 1774374563819.png
    1774374563819.png
    412.1 KB · Просмотры: 32
Вот тебе) сурсик дашь?
package darama.module.impl.render;

import com.mojang.blace3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import darama.control.events.Event;
import darama.control.events.impl.render.EventRender;
import darama.module.TypeList;
import darama.module.api.Annotation;
import darama.module.api.Module;
import darama.module.settings.imp.SliderSetting;
import darama.ui.clickgui.Panel;
import darama.utils.render.ShaderUtils;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL30;

import java.awt.Color;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;

import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;

@Annotation(name = "ShaderEsp", type = TypeList.Render, desc = "Шейдерная обводка игроков")
public class ShaderEsp extends Module {

private final SliderSetting radius = new SliderSetting("Радиус", 4f, 1f, 12f, 1f);

private Framebuffer inFB;
private Framebuffer outFB;

private static final ShaderUtils blurC = new ShaderUtils("blur2c");

public ShaderEsp() {
addSettings(radius);
}

private Framebuffer ensureFB(Framebuffer fb) {
int w = mc.getFramebuffer().framebufferWidth;
int h = mc.getFramebuffer().framebufferHeight;

if (fb == null) {
fb = new Framebuffer(w, h, true, false);
} else if (fb.framebufferWidth != w || fb.framebufferHeight != h) {
fb.resize(w, h, false);
}

fb.setFramebufferColor(0f, 0f, 0f, 0f);
fb.framebufferClear(false);
return fb;
}

@Override
public boolean onEvent(Event event) {
if (!(event instanceof EventRender render)) return false;
if (render.isRender3D()) {
onRender3D(render);
}
return false;
}

private void onRender3D(EventRender e) {
if (mc.world == null || mc.player == null) return;

List<PlayerEntity> targets = new ArrayList<>();
for (Entity entity : mc.world.getAllEntities()) {
if (!(entity instanceof PlayerEntity)) continue;

PlayerEntity player = (PlayerEntity) entity;
if (!player.isAlive()) continue;
if (player == mc.player && mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) continue;

targets.add(player);
}

if (targets.isEmpty()) return;

int fbW = mc.getFramebuffer().framebufferWidth;
int fbH = mc.getFramebuffer().framebufferHeight;

inFB = ensureFB(inFB);
outFB = ensureFB(outFB);

renderTargetsToInputFB(targets, e.getPartialTicks());

GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);

GlStateManager.matrixMode(GL11.GL_PROJECTION);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.ortho(0.0, fbW, fbH, 0.0, -1.0, 1.0);

GlStateManager.matrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GlStateManager.loadIdentity();

int r = radius.getValue().intValue();

int col = Panel.getColorByName("primaryColor");
Color c = new Color(col, true);
float[] rgba = {
c.getRed() / 255f,
c.getGreen() / 255f,
c.getBlue() / 255f,
1f
};

float texelW = 1.0f / fbW;
float texelH = 1.0f / fbH;

FloatBuffer weights = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= r; i++) {
weights.put(ShaderUtils.calculateGaussianValue(i, Math.max(1.0f, r / 2.0f)));
}
weights.rewind();

GlStateManager.enableBlend();
GlStateManager.disableAlphaTest();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

// Pass 1: inFB -> outFB (blur X)
outFB.bindFramebuffer(true);
outFB.framebufferClear(false);

blurC.attach();
blurC.setUniformf("radius", r);
blurC.setUniformf("exposure", 2.5f);
blurC.setUniform("textureIn", 0);
blurC.setUniform("textureToCheck", 20);
blurC.setUniform("avoidTexture", 0);
blurC.setUniformf("color", rgba[0], rgba[1], rgba[2], rgba[3]);
blurC.setUniformf("texelSize", texelW, texelH);
blurC.setUniformf("direction", 1.0f, 0.0f);
glUniform1(blurC.getUniform("weights"), weights);

GL13.glActiveTexture(GL13.GL_TEXTURE0);
inFB.bindFramebufferTexture();
drawFBQuad(inFB);

// Pass 2: outFB -> main framebuffer (blur Y + cut original silhouette)
mc.getFramebuffer().bindFramebuffer(true);

blurC.setUniformf("direction", 0.0f, 1.0f);
blurC.setUniform("avoidTexture", 1);
weights.rewind();
glUniform1(blurC.getUniform("weights"), weights);

GL13.glActiveTexture(GL13.GL_TEXTURE0);
outFB.bindFramebufferTexture();

GL13.glActiveTexture(GL13.GL_TEXTURE20);
inFB.bindFramebufferTexture();

GL13.glActiveTexture(GL13.GL_TEXTURE0);
drawFBQuad(outFB);

blurC.detach();

GL13.glActiveTexture(GL13.GL_TEXTURE20);
GlStateManager.bindTexture(0);

GL13.glActiveTexture(GL13.GL_TEXTURE0);
GlStateManager.bindTexture(0);

GlStateManager.disableBlend();
GlStateManager.enableAlphaTest();

GlStateManager.matrixMode(GL11.GL_PROJECTION);
GL11.glPopMatrix();

GlStateManager.matrixMode(GL11.GL_MODELVIEW);
GL11.glPopMatrix();

GL11.glPopAttrib();
}

private void renderTargetsToInputFB(List<PlayerEntity> targets, float partialTicks) {
inFB.bindFramebuffer(true);
inFB.framebufferClear(false);

EntityRendererManager erm = mc.getRenderManager();
IRenderTypeBuffer.Impl buffer = mc.getRenderTypeBuffers().getBufferSource();

MatrixStack matrixStack = new MatrixStack();

double camX = erm.info.getProjectedView().x;
double camY = erm.info.getProjectedView().y;
double camZ = erm.info.getProjectedView().z;

erm.setRenderShadow(false);

for (PlayerEntity player : targets) {
double x = MathHelper.lerp(partialTicks, player.lastTickPosX, player.getPosX()) - camX;
double y = MathHelper.lerp(partialTicks, player.lastTickPosY, player.getPosY()) - camY;
double z = MathHelper.lerp(partialTicks, player.lastTickPosZ, player.getPosZ()) - camZ;

matrixStack.push();
matrixStack.translate(x, y, z);

erm.renderEntityStatic(
player,
0.0,
0.0,
0.0,
player.rotationYaw,
partialTicks,
matrixStack,
buffer,
erm.getPackedLight(player, partialTicks)
);

matrixStack.pop();
}

buffer.finish();
erm.setRenderShadow(true);

mc.getFramebuffer().bindFramebuffer(true);
}

private void drawFBQuad(Framebuffer fb) {
float w = fb.framebufferWidth;
float h = fb.framebufferHeight;
float u2 = (float) fb.framebufferWidth / (float) fb.framebufferTextureWidth;
float v2 = (float) fb.framebufferHeight / (float) fb.framebufferTextureHeight;

GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f);
GL11.glVertex2f(0f, h);

GL11.glTexCoord2f(u2, 0f);
GL11.glVertex2f(w, h);

GL11.glTexCoord2f(u2, v2);
GL11.glVertex2f(w, 0f);

GL11.glTexCoord2f(0f, v2);
GL11.glVertex2f(0f, 0f);
GL11.glEnd();
}
}
 
хелпаните пыж шейдер есп норм не вставет на игрока я просто тот же силуэт но рядом
вот код база нуклир


package darama.module.impl.render;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import darama.control.events.Event;
import darama.control.events.impl.render.EventRender;
import darama.module.TypeList;
import darama.module.api.Annotation;
import darama.module.api.Module;
import darama.module.settings.imp.SliderSetting;
import darama.utils.render.ShaderUtils;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL30;

import java.awt.Color;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;

import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;
import static darama.ui.clickgui.Panel.getColorByName;

@Annotation(name = "ShaderEsp", type = TypeList.Render, desc = "Шейдерная обводка игроков")
public class ShaderEsp extends Module {

private final SliderSetting radius = new SliderSetting("Радиус", 4f, 1f, 12f, 1f);

private Framebuffer inFB, outFB;

private static final ShaderUtils blurC = new ShaderUtils("blur2c");

public ShaderEsp() {
addSettings(radius);
}

private Framebuffer ensureFB(Framebuffer fb) {
int w = mc.getFramebuffer().framebufferWidth;
int h = mc.getFramebuffer().framebufferHeight;
if (fb == null) {
fb = new Framebuffer(w, h, true, false);
} else if (fb.framebufferWidth != w || fb.framebufferHeight != h) {
fb.resize(w, h, false);
}
fb.setFramebufferColor(0f, 0f, 0f, 0f);
fb.framebufferClear(false);
return fb;
}

@override
public boolean onEvent(Event event) {
if (!(event instanceof EventRender render)) return false;
if (render.isRender3D()) onRender3D(render);
return false;
}

private void onRender3D(EventRender e) {
if (mc.world == null || mc.player == null) return;

List<PlayerEntity> targets = new ArrayList<>();
for (Entity entity : mc.world.getAllEntities()) {
if (!(entity instanceof PlayerEntity p)) continue;
if (!p.isAlive()) continue;
if (p == mc.player && mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) continue;
targets.add(p);
}
if (targets.isEmpty()) return;

int fbW = mc.getFramebuffer().framebufferWidth;
int fbH = mc.getFramebuffer().framebufferHeight;

inFB = ensureFB(inFB);
outFB = ensureFB(outFB);


inFB.bindFramebuffer(true);

MatrixStack stack = e.matrixStack;
float pt = e.getPartialTicks();
EntityRendererManager erm = mc.getRenderManager();
IRenderTypeBuffer.Impl buf = mc.getRenderTypeBuffers().getBufferSource();

erm.setRenderShadow(false);
for (PlayerEntity p : targets) {
erm.renderEntityStaticNoShadow(p, pt, stack, buf, erm.getPackedLight(p, pt));
}
buf.finish();
erm.setRenderShadow(true);


GlStateManager.matrixMode(5889);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.ortho(0.0, fbW, fbH, 0.0, 1000.0, 3000.0);
GlStateManager.matrixMode(5888);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.translatef(0f, 0f, -2000f);

int r = radius.getValue().intValue();
int col = getColorByName("primaryColor");
Color c = new Color(col, true);
float[] rgba = { c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, 1f };
float tw = 1f / fbW;
float th = 1f / fbH;

FloatBuffer weights = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= r; i++) {
weights.put(ShaderUtils.calculateGaussianValue(i, r / 2f));
}
weights.rewind();

GlStateManager.enableBlend();
GlStateManager.blendFunc(GL30.GL_ONE, GL30.GL_SRC_ALPHA);
GL30.glAlphaFunc(GL30.GL_GREATER, 0.0001f);


outFB.bindFramebuffer(true);
blurC.attach();
blurC.setUniformf("radius", r);
blurC.setUniformf("exposure", 2.5f);
blurC.setUniform("textureIn", 0);
blurC.setUniform("textureToCheck", 20);
blurC.setUniform("avoidTexture", 0);
blurC.setUniformf("color", rgba[0], rgba[1], rgba[2], rgba[3]);
glUniform1(blurC.getUniform("weights"), weights);
blurC.setUniformf("texelSize", tw, th);
blurC.setUniformf("direction", 1f, 0f);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
inFB.bindFramebufferTexture();
drawFBQuad(inFB);

// Pass 2: blur Y — outFB → main (avoidTexture убирает силуэт)
mc.getFramebuffer().bindFramebuffer(true);
GlStateManager.blendFunc(GL30.GL_SRC_ALPHA, GL30.GL_ONE_MINUS_SRC_ALPHA);
blurC.setUniformf("direction", 0f, 1f);
blurC.setUniform("avoidTexture", 1);
weights.rewind();
glUniform1(blurC.getUniform("weights"), weights);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
outFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
inFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE0);
drawFBQuad(outFB);

blurC.detach();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
GlStateManager.bindTexture(0);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
GlStateManager.bindTexture(0);
GlStateManager.disableBlend();


GlStateManager.matrixMode(5889);
GL11.glPopMatrix();
GlStateManager.matrixMode(5888);
GL11.glPopMatrix();
}

private void drawFBQuad(Framebuffer fb) {
float w = fb.framebufferWidth;
float h = fb.framebufferHeight;
float u2 = (float) fb.framebufferWidth / (float) fb.framebufferTextureWidth;
float v2 = (float) fb.framebufferHeight / (float) fb.framebufferTextureHeight;
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f); GL11.glVertex2f(0f, h);
GL11.glTexCoord2f(u2, 0f); GL11.glVertex2f(w, h);
GL11.glTexCoord2f(u2, v2); GL11.glVertex2f(w, 0f);
GL11.glTexCoord2f(0f, v2); GL11.glVertex2f(0f, 0f);
GL11.glEnd();
}
}
проблема в евенте EventRender скорей всего не там хукаеться или что то другое
 
Назад
Сверху Снизу