-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Что не так ?
Сделанно быстро на коленке для теста
Сделанно быстро на коленке для теста
code:
private final String vertexGLSL = """
#version 120
void main() {
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
""";
private final String outlineGLSL = """
#versoin 120
uniform sampler2D textureSampler;
uniform vec4 borderColor;
uniform float borderSize;
void main() {
vec2 uv = gl_TexCoord[0].st;
vec4 texColor = texture2D(textureSampler, uv);
if (texColor.a > 0.0) {
gl_FragColor = texColor;
return;
}
float border = 0.0;
vec2 texelSize = vec2(borderSize) / 1.0;
for (float x = -borderSize; x <= borderSize; x += texelSize.x) {
for (float y = -borderSize; y <= borderSize; y += texelSize.y) {
vec2 offset = vec2(x, y);
vec4 neighborColor = texture2D(textureSampler, uv + offset);
if (neighborColor.a > 0.0) {
border = 1.0;
break;
}
}
if (border > 0.0) break;
}
if (border > 0.0) {
gl_FragColor = borderColor;
} else {
gl_FragColor = vec4(0.0);
}
}
""";
private final Listener<RenderEvent.Player.Model> modelListener = event -> {
int windowWidth = mc.getMainWindow().getWidth();
int windowHeight = mc.getMainWindow().getHeight();
if (event.getType().equals(RenderEvent.RenderType.PRE)) {
if (playerFramebuffer == null) {
playerFramebuffer = new Framebuffer(windowWidth, windowHeight, true, Minecraft.IS_RUNNING_ON_MAC);
} else {
if (windowWidth != playerFramebuffer.framebufferWidth || windowHeight != playerFramebuffer.framebufferHeight) {
playerFramebuffer.resize(windowWidth, windowHeight, false);
}
playerFramebuffer.framebufferClear(Minecraft.IS_RUNNING_ON_MAC);
}
playerFramebuffer.bindFramebuffer(true);
} else if (event.getType().equals(RenderEvent.RenderType.POST)) {
if (playerFramebuffer != null) {
playerFramebuffer.unbindFramebuffer();
int program = GL30.glCreateProgram();
int fragment = GL30.glCreateShader(GL30.GL_FRAGMENT_SHADER);
GL30.glShaderSource(fragment, new BufferedReader(new InputStreamReader(new ByteArrayInputStream(outlineGLSL.getBytes()))).lines().collect(Collectors.joining("\n")));
GL30.glCompileShader(fragment);
GL30.glAttachShader(program, fragment);
int vertex = GL30.glCreateShader(GL30.GL_VERTEX_SHADER);
GL30.glShaderSource(vertex, new BufferedReader(new InputStreamReader(new ByteArrayInputStream(vertexGLSL.getBytes()))).lines().collect(Collectors.joining("\n")));
GL30.glCompileShader(vertex);
GL30.glAttachShader(program, vertex);
GL30.glLinkProgram(program);
playerFramebuffer.bindFramebuffer(true);
Color color = new Color(0xFF0000);
GL30.glUseProgram(program);
int par1 = GL30.glGetUniformLocation(program, "textureSampler");
GL30.glUniform1i(par1, playerFramebuffer.getFramebufferTexture());
int par2 = GL30.glGetUniformLocation(program, "borderColor");
GL30.glUniform4i(par2, color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
int par3 = GL30.glGetUniformLocation(program, "borderSize");
GL30.glUniform1f(par3, 0.5F);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(GL30.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
bufferBuilder.pos(0, 0, 0).tex(0, 0).endVertex();
bufferBuilder.pos(0, windowHeight, 0).tex(0, 1).endVertex();
bufferBuilder.pos(windowWidth, windowHeight, 0).tex(1, 1).endVertex();
bufferBuilder.pos(windowWidth, 0, 0).tex(1, 0).endVertex();
tessellator.draw();
GL30.glUseProgram(0);
playerFramebuffer.unbindFramebuffer();
//GL30.glDeleteProgram(program);
mc.getFramebuffer().bindFramebuffer(true);
playerFramebuffer.bindFramebufferTexture();
Tessellator tessellator2 = Tessellator.getInstance();
BufferBuilder bufferBuilder2 = tessellator.getBuffer();
bufferBuilder2.begin(GL30.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
bufferBuilder2.pos(0, 0, 0).tex(0, 0).endVertex();
bufferBuilder2.pos(0, windowHeight, 0).tex(0, 1).endVertex();
bufferBuilder2.pos(windowWidth, windowHeight, 0).tex(1, 1).endVertex();
bufferBuilder2.pos(windowWidth, 0, 0).tex(1, 0).endVertex();
tessellator2.draw();
playerFramebuffer.unbindFramebufferTexture();
mc.getFramebuffer().bindFramebuffer(false);
}
}
};
Последнее редактирование: