Сглаживание

Версия Minecraft
1.12.2
451
13
34
Привет всем, как можно с помощью GL11 сгладить текстуру?

1625519248997.png -выглядит так

Java:
            GL11.glPushMatrix();
            //this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
            //this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE);
            GL11.glEnable(GL11.GL_LINE_SMOOTH);
            GL11.glEnable(GL11.GL_POLYGON_SMOOTH);
            GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST);
            GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_NICEST);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.9f);
            this.mc.getTextureManager().bindTexture(_Resources.bckg);
            int nullW = 350, nullH = 220;
            Gui.drawModalRectWithCustomSizedTexture(this.width / 2 - nullW / 2, this.height / 2 - nullH / 2, 0.0F, 0.0F, nullW, nullH, 350, 220);
            GL11.glDisable(GL11.GL_BLEND);
            GL11.glPopMatrix();

Заранее благодарен
 
Решение
Как по мне было бы более правильно создать на поздних этапах инициализации отдельный мультисэмпловый фреймбуфер, на этапе отрисовки рендерить в него что нужно сгладить, а потом заблинтить его в основной фреймбуфер. И всё это для того, чтобы не заставлять весь майн отрисовывать всё в режиме мультисэмплинга. Ну или шейдеры, но это уже сюда.
Это так не работает)
Нужно ещё задать количество сэмплов. Плюс это надо делать перед созданием дисплея.
Плюс Майн рисует во фреймбуфер, а чтобы рисовать во фреймбуфер с мультисемплом тоже нужно сделать ещё некоторые манипуляции.
 
Майн рисует во фреймбуфер
Это сути дела не меняет. в openGL команды применяются к активному буферу.

А про окно да :
glfwWindowHint(GLFW_SAMPLES, 4);
Нужно чтобы была эта штука включена перед созданием окна.

Хук может есть для внешнего кода, перед созданием окна openGL?
 
Это сути дела не меняет. в openGL команды применяются к активному буферу.
Обычный фреймбуфер не поддерживает мультисемплинг.
Попробуй сам и увидишь что нифига не работает)
 
Как по мне было бы более правильно создать на поздних этапах инициализации отдельный мультисэмпловый фреймбуфер, на этапе отрисовки рендерить в него что нужно сгладить, а потом заблинтить его в основной фреймбуфер. И всё это для того, чтобы не заставлять весь майн отрисовывать всё в режиме мультисэмплинга. Ну или шейдеры, но это уже сюда.
 
Как по мне было бы более правильно создать на поздних этапах инициализации отдельный мультисэмпловый фреймбуфер, на этапе отрисовки рендерить в него что нужно сгладить, а потом заблинтить его в основной фреймбуфер.
Для человека, не имеющего опыта с этим мне кажется ничего не понятно
 
Тебе нужно не сглаживание, а фильтрация текстуры. В кубаче для этого есть встроенные костыли: например, когда надеваешь тыкву на голову, на весь экран натягивается мыльная картинка. Чтобы картинка мылилась, в кубаче (по крайней мере на моих древних версиях) использовались специальные .mcmeta файлики. Они должны лежать рядом с файлом текстуры и называться как файл с текстурой + .mcmeta (например, pumpkin.png.mcmeta). Внутри это жсон который выглядит как-то так:
JSON:
{
  "texture": {
    "blur": true,
    "clamp": false
  }
}
Нужная строчка это blur, он включает линейную фильтрацию текстур. Если хочется костылить самому вместо того чтобы пользоваться костылями майнкрафта, то загугли как в опенгл включается фильтрация текстур, это тоже просто.

Если тебе нужно сильно уменьшать текстуру без потери качества, то гугли про мипмапы, в кубаче встроенных инструментов для этого насколько я знаю нет.


Всё вот это не относится к делу и стоит выпилить:
Java:
            GL11.glEnable(GL11.GL_LINE_SMOOTH);
            GL11.glEnable(GL11.GL_POLYGON_SMOOTH);
            GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST);
            GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_NICEST);
 
Назад
Сверху