Версия Minecraft
1.12.2
476
9
39
Собственно, на скрине видно, что верхняя часть блока проваливается вниз. И что странно если перегенерить(F3+A) то блок выправляется и всё ок.
Рендерю дефолтными методами, немного посреди кода перед buffer.putPosition инжектю в VertexData'у модельки. И в целом всё.
Перетыкал кучу всего хз, пробовал в лог выводить сиё и разницы нет. То есть позиции(x,y,z) в VertexData правильные и может это связанно с каким-то внутренним состоянием буффера?
2018-10-05_01.18.35.png
Из теорий есть версия что это связано с типом используемых примитивов(float/double) юзаю щя float при переходе на float это стало чаще появляться(субъективное мнение, скорее всего, я ошибаюсь)
 
Последнее редактирование:
476
9
39
В смысле? Я же ему координаты(т.е точки в VertexData) задал для модельки. И они не меняются в т.ч даже если рендер рестартнуть.
 
476
9
39
Это интересная теория, только в VertexData ничего не меняется. Вообще. И высота там тоже есть.
 
476
9
39
Ну, ты же высоты точек берёшь в том числе и из соседних блоков?
Сорри, это действительно так, я потыкал разные алгоритмы и да, проблема в этом, возможно(не точно, иногда в середине чанка возникает артефакт). И, если чанк не загружен, то как взять высоту его блока? Не загружать же чанк принудительно, да и не получится, если это клиент
 
476
9
39
Хм, посмотрел по спец. условию
Код:
!checkChunkRange(vertex.x, vertex.z, x, z) && Minecraft.getMinecraft().player.world.getChunkProvider().provideChunk(x / 16, z / 16).isEmpty() && BlockHelper.getFastBlockState(accessIn, x, (int) vertex.y+1, z).getMaterial() == Material.AIR

private boolean checkChunkRange(double x, double z, int x1, int z1)
{
    return Math.floor((int)x / 16) == Math.floor(x1 / 16) && Math.floor((int)z / 16) == Math.floor(z1 / 16);
}
Он почти не вызывается, и там где вызывается артефактов нет. =_= как всё сложно с майном.
 
476
9
39
У неё и рендер через buffer.pos.tex.color, а не через VertexData'y
 
Сверху