Как настроить прозрачность

Версия Minecraft
1.7.10
1,976
68
220
Доброго времени суток о/

В общем, сделал я себе рендер кружочка за спиной с частично прозрачной текстурой. Всё бы ничего, но ни вода, ни другие модельки (кроме игрока) сквозь неё не видно. Собственно, вот настройки до и после рендера:
Java:
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glShadeModel(GL11.GL_SMOOTH);

// Текстуры, повороты, шейдеры и сам рендер тут, они ничего не меняют

GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();

VMrwR5wnZck.jpg


Пробовал через glDepthMask(false) - помогло, но я даже не знаю, что выглядит хуже ._.
qwS39Zsybm4.jpg


А вот если посмотреть сквозь цветное стекло - всё нормально.
lodK8alRXcA.jpg

Но в его коде я не нашёл ничего ТАКОГО. Вопрос - щито делать чтобы было нормально?
halp((

Заранее спасибо
 
Решение
В общем поворот туловища - это ничто иное как renderYawOffset. Так что остаётся лишь его интерполировать и нужный угол готов.
На всякий случай метод интерполяции, если вдруг кто не знает:
Java:
/**
* Interpolates values for smoother render
* */
public static double interpolate(double last, double now, float partialTicks) {
    return last + (now - last) * partialTicks;
}
Всем спасибо, все свободны; Равен держи лукас за помощь в ВК :D
1,417
44
594
250
12
24
Java:
    @SubscribeEvent
    public void renderWorldLastEvent(RenderWorldLastEvent e)
    {
        EntityPlayer p = Minecraft.getMinecraft().thePlayer;
        renderBabylon(p);
    }
    
    private void renderBabylon(EntityPlayer p)
    {
        double x = p.posX - RenderManager.renderPosX;
        double y = p.posY - RenderManager.renderPosY;
        double z = p.posZ - RenderManager.renderPosZ;
        GL11.glDisable(GL11.GL_ALPHA_TEST);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_CULL_FACE);
        OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
        Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(ModInfo.MODID + ":" + "textures/particles/babylon.png"));
        Tessellator t = Tessellator.instance;
        t.startDrawingQuads();
        t.addVertexWithUV(x-2, y, z-2, 0, 0);
        t.addVertexWithUV(x+2, y, z-2, 0, 1);
        t.addVertexWithUV(x+2, y, z+2, 1, 1);
        t.addVertexWithUV(x-2, y, z+2, 1, 0);
        t.draw();
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
    }
 

Вложения

  • 2018-01-06_16.27.01.png
    2018-01-06_16.27.01.png
    485.7 KB · Просмотры: 74
1,976
68
220
@RinKirin, а ты попробуй в том, что я кидал выше (Specials.Post). У тебя прокатило потому что RenderWorldLastEvent. Очерёдность отрисовки. Мне об этом уже во вконтактлях сказали, так что я тоже пофиксил.

Про то, что твоя отрисовка ни разу не плавная промолчу, это я уже тоже сделал.

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

-Sl3ToF_-20.jpg


Да, у тебя точно такая же проблема
Wbv0eWdpc9I.jpg
 
Последнее редактирование:
250
12
24
250
12
24
Про воду не знаю как пофиксить, попробовал, не получилось. А про "плавную отрисовку" не думал про нее ведь ты и сам это можешь сделать. Речь то шла о рендере, а не о синхронизации
 
1,976
68
220
Ещё вопрос. Я поменял эвент и теперь то, что я рисую не вращается за игроком. Я добавил поворот, зависящий от player.rotationYaw, но, как оказалось, это то же самое, что и player.rotationYawHead, то есть равно повороту головы, а не туловища.
Как мне вращать этот кружок так, чтобы он был всегда параллелен плоскости спины, а не затылка???
 
608
5
15
Ещё вопрос. Я поменял эвент и теперь то, что я рисую не вращается за игроком. Я добавил поворот, зависящий от player.rotationYaw, но, как оказалось, это то же самое, что и player.rotationYawHead, то есть равно повороту головы, а не туловища.
Как мне вращать этот кружок так, чтобы он был всегда параллелен плоскости спины, а не затылка???
Не вращать вообще? :D
 
7,099
324
1,510
Посмотри рендер туловища, и, возможно, хуком туда вставь рендер кружочка
 
608
5
15
1,976
68
220
Посмотри рендер туловища, и, возможно, хуком туда вставь рендер кружочка
Если бы я ещё знал куда это вставлять...
А если найду там поворот туловища, то его можно просто скопировать
 
1,976
68
220
В общем поворот туловища - это ничто иное как renderYawOffset. Так что остаётся лишь его интерполировать и нужный угол готов.
На всякий случай метод интерполяции, если вдруг кто не знает:
Java:
/**
* Interpolates values for smoother render
* */
public static double interpolate(double last, double now, float partialTicks) {
    return last + (now - last) * partialTicks;
}
Всем спасибо, все свободны; Равен держи лукас за помощь в ВК :D
 
Сверху