Рендер зачарования в GUI

Версия Minecraft
1.7.10
1,417
44
594
День добрый, в общем.
Рендерю звезду ада в гуи:
1551094521600.png
И все что прозрачное становиться таким:
1551094552084.png
Код:
Код:
            FontRenderer font = itemStack_day.getItem().getFontRenderer(itemStack_day);
            if (font == null) font = mc.fontRenderer;
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glDisable(GL11.GL_LIGHTING);
            renderItem.renderItemAndEffectIntoGUI(font, mc.getTextureManager(), itemStack_day, (int) ((x0itemselect)/(1.4*2.2)), (int) ((y0itemselect+84)/(1.4*2.2)));
 

Вложения

  • 1551094453868.png
    1551094453868.png
    931.7 KB · Просмотры: 52
1,038
57
229
GL11.PushMatrix();
...
GL11.PopMatrix();

Ты включил прозрачность и выключил свет, но при этом не вернул это всё обратно, вот для этих целей и есть вот эти две строчки. Почти всё что будет происходить между этими двумя строками никак не повлияет на всё последующее.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Короче говоря, то что ты повключал, повыключай, сразу после твоего кода (верни в то состояние, в котором оно было до твоего кода, может там какой-то свет и так выключен был, а ты его выключаешь, а потом включишь, а это тебе не нужно)
 
1,038
57
229
А можно увидеть код вместе с ними?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
GL11.PushMatrix();
...
GL11.PopMatrix();

Ты включил прозрачность и выключил свет, но при этом не вернул это всё обратно, вот для этих целей и есть вот эти две строчки. Почти всё что будет происходить между этими двумя строками никак не повлияет на всё последующее.
Название методов не смущает? Эти строки сохраняют состояние матриц и только. То бишь размер, позицию и поворот.
 
1,038
57
229
не знал, спс. Но не думаю что это именно так. Иначе мы бы никогда не знали включен был флаг или выключен и постоянно это приходилось бы контроллировать. Представляешь если какой то там мод выключил BLEND, а minecraft'у он нужен включенным или наоборот выключенным. А игра работает в несколько потоков и получилась бы такая хрен...
Но ты прав в том что, он не все флаги обворачивает.
как tesellator, если написать tesellator.draw() он может и ругнуться.
 
Последнее редактирование:

tox1cozZ

aka Agravaine
8,454
598
2,890
не знал, спс. Но не думаю что это именно так. Иначе мы бы никогда не знали включен был флаг или выключен и постоянно это приходилось бы контроллировать. Представляешь если какой то там мод выключил BLEND, а minecraft'у он нужен включенным или наоборот выключенным. А игра работает в несколько потоков и получилась бы такая хрен...
Но ты прав в том что, он не все флаги обворачивает.
как tesellator, если написать tesellator.draw() он может и ругнуться.
К OpenGL можно обращаться лишь с одного потока, в котором создан контекст. И чтобы не было проблем, хорошим тоном считается всегда вырубать за собой атрибуты.
 
1,057
50
234
RenderHelper.enableGUIStandardItemLighting();
//redner
RenderHelper.disableStandardItemLighting();
 
1,038
57
229
Это явно из-за какого то аттрибута, но не обязательно здесь ошибка. Ты может в блоке где забыл его перевести в обратное состояние. Попробуй начать с начала. Убери GUI вообще. Затем добавь пустой GUI который ничего не рисует или рисует какой нить не прозрачный элемент.
Или я так понимаю если ты не рисуешь звезду, то всё ОК?
 

timaxa007

Модератор
5,831
409
672
А ты точно правильно написал?

Java:
   RenderHelper.enableGUIStandardItemLighting();

//выбранный предмет
itemRender.renderItemAndEffectIntoGUI

//цикл рендер листа
itemRender.renderItemAndEffectIntoGUI

   RenderHelper.disableStandardItemLighting();
   GL11.glDisable(GL11.GL_DEPTH_TEST);
---
Если не поможет, то попробуй не использовать:
Java:
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LIGHTING);
 
Последнее редактирование:
1,417
44
594
Реально не понимаю в чем ошибка...
Покажу код и результат:
1551360025432.png

Java:
    @Override
    public void drawScreen(int x, int y, float tick) {
        int x0 = (this.width - this.xSize/2) / 2;
        int y0 = (this.height - this.ySize/2) / 2;
        drawDefaultBackground();
        OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
        GL11.glPushMatrix();
        GL11.glScaled(1.4,1.4,1);
        renderItem.renderWithColor=false;
        GL11.glColor4f(0.5F, 0.5F, 0.5F, 1F);
        for(int i=0; i<35; i++){
            int dw = 26*(int)(i%7);
            int dh = 26*(int)(i/7);
            if(i+(35*this.page)>=store.size()) break;
            ItemStack itemStack=null;
//Задаю itemStack
            if (itemStack != null) {
                try {
                    FontRenderer font = itemStack.getItem().getFontRenderer(itemStack);
                    if (font == null) font = mc.fontRenderer;
                    // Рендерю список
                    GL11.glDisable(GL11.GL_LIGHTING);
                    GL11.glColor4f(0.5F, 0.5F, 0.5F, 1F);
                    renderItem.renderItemAndEffectIntoGUI(font, mc.getTextureManager(), itemStack, (int)((x0itemlist+(dw))/(1.4)), (int)((y0itemlist+(dh))/(1.4)));
                } catch (Exception e){
                    break;
                }
            }
        }
        renderItem.renderWithColor=true;
        int x0itemselect = x0+33;
        int y0itemselect = y0+30;
        /*Выбранный предмет| Ошибка происходит, когда тут звезда ада*/
        GL11.glPushMatrix();
        ItemStack itemStack = null;// = new ItemStack(Item.getItemById(store.get(this.select)));
// Задаю itemStack
        if (itemStack != null) {
            renderItem.renderWithColor=false;
            GL11.glScaled(2.2,2.2,1);
            FontRenderer font = itemStack.getItem().getFontRenderer(itemStack);
            if (font == null) font = mc.fontRenderer;
            GL11.glColorMask(true, true, true, false);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glDisable(GL11.GL_LIGHTING);
            RenderHelper.enableGUIStandardItemLighting();
            renderItem.renderItemAndEffectIntoGUI(font, mc.getTextureManager(), itemStack, (int) ((x0itemselect)/(1.4*2.2)), (int) ((y0itemselect)/(1.4*2.2)));
            RenderHelper.disableStandardItemLighting();
            renderItem.renderWithColor=true;
        }

        ItemStack itemStack_day = null;
// Задаю itemStack_day. Ошибка происходит только когда тут блок, если предмет, т о ничего не ломается
        //System.out.print(itemStack_day);
        if (itemStack_day != null) {
            GL11.glColorMask(true, true, true, false);
            FontRenderer font = itemStack_day.getItem().getFontRenderer(itemStack_day);
            if (font == null) font = mc.fontRenderer;
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glDisable(GL11.GL_LIGHTING);
            RenderHelper.enableGUIStandardItemLighting();
            renderItem.renderItemAndEffectIntoGUI(font, mc.getTextureManager(), itemStack_day, (int) ((x0itemselect)/(1.4*2.2)), (int) ((y0itemselect+84)/(1.4*2.2)));
            RenderHelper.disableStandardItemLighting();
        }
        GL11.glPopMatrix();
        GL11.glPopMatrix();


        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_ALPHA_TEST);
        GL11.glDisable(GL11.GL_LIGHTING);
        mc.renderEngine.bindTexture(strelki);
// Рендерю прочие картинки и т.п.
        super.drawScreen(x, y, tick);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
    }
Вариант, когда снизу рисуется предмет, а не блок. (Подробности в комментариях к коду)
1551360361225.png
Подскажите, пожалуйста, где лажа.
(Возможен говнокод из-за того, что я пытался всячески поправить)
 

timaxa007

Модератор
5,831
409
672
1,417
44
594
Сверху