• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Проблема с Scissor

  • Автор темы Автор темы Zundonza
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Апр 2021
Сообщения
28
Реакции
1
Здравствуйте, форумчане. Проблема в том, что когда я нахожусь в оконном режиме, растянутым на весь экран, ножницы из opengl правильно обрезают зону рендера кнопок, и скролл работает правильно. Но стоит мне изменить разрешение (перейти в полноэкранный режим, изменить размер самого окна), то зона обрезания сдвигается (особенно вверх), хоть я учитываю GuiScaledHeight в расчёте координат.

Код для обрезки:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    GL11.glEnable(GL11.GL_SCISSOR_TEST);
    GL11.glScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

Рендер категорий и кнопок с обрезанием:
Expand Collapse Copy
public void render(MatrixStack ms, int x, int y, float ticks) {
    // ... отрисовка ректов категорий
    
    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    GL11.glDisable(GL11.GL_SCISSOR_TEST);
}
 
Здравствуйте, форумчане. Проблема в том, что когда я нахожусь в оконном режиме, растянутым на весь экран, ножницы из opengl правильно обрезают зону рендера кнопок, и скролл работает правильно. Но стоит мне изменить разрешение (перейти в полноэкранный режим, изменить размер самого окна), то зона обрезания сдвигается (особенно вверх), хоть я учитываю GuiScaledHeight в расчёте координат.

Код для обрезки:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    GL11.glEnable(GL11.GL_SCISSOR_TEST);
    GL11.glScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

Рендер категорий и кнопок с обрезанием:
Expand Collapse Copy
public void render(MatrixStack ms, int x, int y, float ticks) {
    // ... отрисовка ректов категорий
   
    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    GL11.glDisable(GL11.GL_SCISSOR_TEST);
}
Вроде нужно юзать не (window.getGuiScaledHeight() а просто getHeight()
 
Здравствуйте, форумчане. Проблема в том, что когда я нахожусь в оконном режиме, растянутым на весь экран, ножницы из opengl правильно обрезают зону рендера кнопок, и скролл работает правильно. Но стоит мне изменить разрешение (перейти в полноэкранный режим, изменить размер самого окна), то зона обрезания сдвигается (особенно вверх), хоть я учитываю GuiScaledHeight в расчёте координат.

Код для обрезки:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    GL11.glEnable(GL11.GL_SCISSOR_TEST);
    GL11.glScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

Рендер категорий и кнопок с обрезанием:
Expand Collapse Copy
public void render(MatrixStack ms, int x, int y, float ticks) {
    // ... отрисовка ректов категорий
   
    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    GL11.glDisable(GL11.GL_SCISSOR_TEST);
}
попробуй использовать mc.getMainWindow()
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здравствуйте, форумчане. Проблема в том, что когда я нахожусь в оконном режиме, растянутым на весь экран, ножницы из opengl правильно обрезают зону рендера кнопок, и скролл работает правильно. Но стоит мне изменить разрешение (перейти в полноэкранный режим, изменить размер самого окна), то зона обрезания сдвигается (особенно вверх), хоть я учитываю GuiScaledHeight в расчёте координат.

Код для обрезки:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    GL11.glEnable(GL11.GL_SCISSOR_TEST);
    GL11.glScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

Рендер категорий и кнопок с обрезанием:
Expand Collapse Copy
public void render(MatrixStack ms, int x, int y, float ticks) {
    // ... отрисовка ректов категорий
   
    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    GL11.glDisable(GL11.GL_SCISSOR_TEST);
}
делай через RenderSystem
 
делай через RenderSystem
может я тебя не понял, но вот, переделал на RenderSystem, эффект тот же
Java:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    RenderSystem.enableScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

public void render(MatrixStack ms, int x, int y, float ticks) {

    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    RenderSystem.disableScissor();
}
 
может я тебя не понял, но вот, переделал на RenderSystem, эффект тот же
Java:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = (window.getGuiScaledHeight() - y - height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    RenderSystem.enableScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

public void render(MatrixStack ms, int x, int y, float ticks) {

    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    RenderSystem.disableScissor();
}
Java:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = window.getHeight() - (y + height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    RenderSystem.enableScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

public void render(MatrixStack ms, int x, int y, float ticks) {

    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    RenderSystem.disableScissor();
}
Пробуй это
 
Java:
Expand Collapse Copy
private void applyScissor(int x, int y, int width, int height) {
    int scaleFactor = (int) window.getGuiScale();
    int scaledX = x * scaleFactor;
    int scaledY = window.getHeight() - (y + height) * scaleFactor;
    int scaledWidth = width * scaleFactor;
    int scaledHeight = height * scaleFactor;

    RenderSystem.enableScissor(scaledX, scaledY, scaledWidth, scaledHeight);
}

public void render(MatrixStack ms, int x, int y, float ticks) {

    applyScissor(this.x, this.y + 16, this.width, this.height);

    for(Button button : buttonList) {
        button.render(ms, x, y, ticks);
    }

    RenderSystem.disableScissor();
}
Пробуй это
Сделал, эффект такой же. Вообще не знаю как быть :confused:
 
GL11.glScissor(x * scaleFactor, (window.getScaledHeight() - height) * scaleFactor, (width - x) * scaleFactor, (height - y) * scaleFactor);
Всё также, только появилась ошибка
[19:35:03] [Render thread/INFO] [minecraft/GlDebugTextUtils]: OpenGL debug message, id=1281, source=API, type=ERROR, severity=HIGH, message=GL_INVALID_VALUE error generated. Width and height must not be negative.
 
Как ратки суваьь первый как вебхуки сносить ты первый а как кодить помогите пжпжпжпжпжжпжпжпжппжжппжжпжппж форму хелппп
 
Назад
Сверху Снизу