Рендер модели и текстуры низкого качества в зависимости от расстояния

Версия Minecraft
1.7.10
222
5
28
К примеру есть модель(obj). Я бы хотел сделать так, чтобы если объект, который рендерится находится на N расстояние от того, для кого он рендерится - то рендерилась lite версия модели с текстурой низкого качества. Понятное дело, что у меня будет две вариации моделей: качественная и похеренная, аналогично и с текстуркой. Вопрос, как при рендере в методе
Java:
IItemRenderer#renderItem
рассчитать расстояние от того, для кого происходить рендер. Если это не верный подход, то буду рад узнать о более правильном решении.
 
Решение
Для кого происходит - это-же ни кто иной клиентский игрок: Minecraft.getMinecraft().thePlayer.
Расстояние высчитывать:
Java:
double offsetX = entity.posX - mc.thePlayer.posX;
double offsetY = entity.posZ - mc.thePlayer.posZ;
double dis = Math.sqrt(offsetX * offsetX + offsetY * offsetY);
if (dis > radius)
А entity бери из аргумента "Object... data", там от определённого ItemRenderType разные данные.

timaxa007

Модератор
5,831
409
672
Для кого происходит - это-же ни кто иной клиентский игрок: Minecraft.getMinecraft().thePlayer.
Расстояние высчитывать:
Java:
double offsetX = entity.posX - mc.thePlayer.posX;
double offsetY = entity.posZ - mc.thePlayer.posZ;
double dis = Math.sqrt(offsetX * offsetX + offsetY * offsetY);
if (dis > radius)
А entity бери из аргумента "Object... data", там от определённого ItemRenderType разные данные.
 
7,099
324
1,509
Стоит отметить, что вычислять квадратный корень не выгодно, т.к . это долгая операция. Поэтому стоит сравнивать с квадратом радиуса
offsetX * offsetX + offsetY * offsetY > radius * radius
 
2,505
81
397
Для текстур есть mip mapping. Что такое - легко гуглится.
Можно сгенерировать руками и расположить в самом изображении. Но майн из коробки поддерживает мипмаппинг только для атласов. Поэтому, скорее всего, придется написать свое. Еще можно генерировать мипмапы в рантайме на гпу. Для этого нужно после аплоада данных текстуры на гпу вызвать что-то типа GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D). Ты руками, конечно же, ничего не аплоадишь, потому что это делает майн, но можно попробовать где-нибудь в конструкторе рендерера забиндить текстуру и сгенерировать мипмапы.
 
Сверху