Вода пропускает свет

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Народ, кто шарит как сделать чтобы вода свет не пропускала? А то до дна просвечивает.. Я думал это как то с рендерлейром связано


И еще вопрос номер два: по какому принципу сетается цвет в методе setColor() ? Почему то классический варик 0x07508f (в 6 цифр то бишь) не работает, цвет сетается прозрачный.:(

 

hohserg1

Золотая лига
Сообщения
3,287
Лучшие ответы
83
Симпатии
217
#2
Optifine? Там в настройках вырубается
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#3

jopi

Каменная лига
Сообщения
505
Лучшие ответы
7
Симпатии
24
#4
@Maxik001 я хз типо если ты юзаешь 6циферный и робит то круто тебе
я же на 1.5.2 типо юзал DECIMAL цвета
Это перемноженный RGB

Java:
public int getDec(int r, int g, int b)
{
    return (r*65536)+(g*256)+b;
}
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#6
Да цвет это вообще неважно особо нафиг, как прозрачность сделать меньше с каждым блоком в глубину? Я не нашел это в воде нигде.
 

hohserg1

Золотая лига
Сообщения
3,287
Лучшие ответы
83
Симпатии
217
#7
Можно верхнюю гранить воды рендерить независимо от видимости(блоки перед ней), чтобы чем глубже, тем меньше была прозрачность из-за наложения
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#8

jopi

Каменная лига
Сообщения
505
Лучшие ответы
7
Симпатии
24
#9
Да цвет это вообще неважно особо нафиг, как прозрачность сделать меньше с каждым блоком в глубину? Я не нашел это в воде нигде.
GL11.glColor_RGBA(r,g,b,F)
f - прозрачность
цвет доставать можешь
Метод ГЛ по другому как-то называется
 

hohserg1

Золотая лига
Сообщения
3,287
Лучшие ответы
83
Симпатии
217
#10
Так а как ему узнать, что там глубоко и нужно альфу поднять?
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#11

hohserg1

Золотая лига
Сообщения
3,287
Лучшие ответы
83
Симпатии
217
#12
Еще можно типо сказать ,что не баг, а фича, кристально чистая вода
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#13

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#14
Есть тут setRenderLayer(BlockRenderLayer....);
для типа этих целей, но тут блин либо TRANSLUCENT , это прозрачная как на скрине, либо SOLID или CUTOUT что в данном случае разницы не имеет значит

Это конечно выглядит красиво но...



@SideOnly(Side.CLIENT)
public BlockRenderLayer getBlockLayer()
{
return this.blockMaterial == Material.WATER ? BlockRenderLayer.TRANSLUCENT : BlockRenderLayer.SOLID;
}
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#15
Я нашел короче то что надо
Java:
    public EnumBlockRenderType getRenderType(IBlockState state)
    {
        return EnumBlockRenderType.LIQUID;
    }
Но есть небольшая проблема. BlockFluidClassic это видимо форджевский класс, не имеющий отношения к ванильному BlockLiquid

А в ванильный BlockFluidRenderer никто не удосужился вставить хуки для связки. Мораль:
форджевская жидкость говно значит
Для нормальной работы либо нужно хукать в BlockFluidRenderer#renderFluid для вставки этих форджевских Fluid, либо через кастомный модельлоадер делать свой рендер воды.

Как разберусь запилю тутор по созданию офигенской воды.
 
Последнее редактирование:

ZZZubec

Каменная лига
Сообщения
190
Лучшие ответы
7
Симпатии
13
#16
суть примерно в чём, вода это плоская вещь. То есть рендерится только верхушка воды, её прозрачность определяется настройками текстуры (её альфой). Поэтому если ты хочешь переписать рендер, то тебе надо получить расстояние до берега. Естественно круто будет смотреться только сверху))
Когда ты внутри воды, рендерится скорее всего или через шейдер или ещё чего. По сути на экран закладывается текстура (такая же как голова тыквы). И в таком случае тебе надо определять расстояние до поверхности.
То есть сам блоки воды не имеет значения как таковой при любом раскладе
 

iconst_1

Золотая лига
Сообщения
1,741
Лучшие ответы
47
Симпатии
280
#17
Сделай воду немного непрозрозрачной через setBlockOpacity(или похожий метод в классе блока) и все. Тогда на блоки под водой будет попадать меньше света и они станут темнее.
 

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#18
суть примерно в чём, вода это плоская вещь. То есть рендерится только верхушка воды, её прозрачность определяется настройками текстуры (её альфой). Поэтому если ты хочешь переписать рендер, то тебе надо получить расстояние до берега. Естественно круто будет смотреться только сверху))
Когда ты внутри воды, рендерится скорее всего или через шейдер или ещё чего. По сути на экран закладывается текстура (такая же как голова тыквы). И в таком случае тебе надо определять расстояние до поверхности.
То есть сам блоки воды не имеет значения как таковой при любом раскладе
Именно что как то имеет, т.к в ванильке таковой эффект есть
Писать кастомный рендер это последнее что я буду делать. Сперва хрчу хукнуть BlockFluidRender#renderFluid и сделать чтобы он дружил с BlockFluidClassic

Вода это такой же блок каки все остальные. Он не рендерит сторону если к этой стороне примыкает isFullBlock или как то так. Когда игрок в воде, на экран накладывается просто текстура с цветом. У джабелара гайд есть как это делать через ливингэвент
 
Последнее редактирование:

Maxik001

Золотая лига
Сообщения
4,128
Лучшие ответы
37
Симпатии
404
#19
Сделай воду немного непрозрозрачной через setBlockOpacity(или похожий метод в классе блока) и все. Тогда на блоки под водой будет попадать меньше света и они станут темнее.
Хорошо попробую
 

Liahim

Золотая лига
Сообщения
2,947
Лучшие ответы
32
Симпатии
161
#20
Народ... А никто не думал, что это всё обеспечивается тупо на этапе построения лайт мэпы?
Вроде как он просто чекает количество блоков воды и говорит, тут тень. И усё... Чего вы блок-то дербаните?
 
Сверху