Рендер прямоугольника в мире

sk9zist :l

Исправился
981
18
158
Повернуть рендер куба. (обычный, плоский, расположен по вертикали пока тестовый) Как провернуть?
Сейчас такой код:
Java:
float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks();
EntityPlayer player = Minecraft.getMinecraft().player;
double x = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
double y = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
double z = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
GlStateManager.translated(-x, -y, -z);
//GlStateManager.loadIdentity();
//GlStateManager.matrixMode(GL11.GL_MODELVIEW);
GlStateManager.rotate(180, 0, (float)-y, 0);
Проблема в том, что кубик рендериться повернутый, нослишком далеко от нужных координат, думаю я вращаю вокруг чего-то другого.

Ожидаю скорой помощи.
 
Решение
Будет в мире на координатах (5; 5; 5):
Java:
        float x = 5.0F;
        float y = 5.0F;
        float z = 5.0F;
        float width = 5.0F;
        float height = 5.0F;

        Minecraft mc = Minecraft.getMinecraft();
        RenderManager renderManager = mc.getRenderManager();
        EntityLivingBase player = mc.player;

        GlStateManager.pushMatrix();
        GlStateManager.translate(-renderManager.viewerPosX + x, -renderManager.viewerPosY + y, -renderManager.viewerPosZ + z);
        GlStateManager.rotate(System.currentTimeMillis() / 5 % 360, 0, 1, 0);

        GlStateManager.disableTexture2D();
        GlStateManager.enableBlend();
        GlStateManager.disableCull();
        GlStateManager.color(120.0F, 130.0F, 296.0F...
В glRotate передается угол и ОСЬ, вокруг которой вращается объект. Зачем ты туда передаешь y координату? Доки открой и почитай -.-
glRotate(180, 1, 0, 0) - вращение вокруг оси x
glRotate(180, 0, 1, 0) - вращение вокруг оси y
glRotate(180, 0, 0, 1) - вращение вокруг оси z
 
Зачем ты туда передаешь y координату
Так это просто я скинул наилучший из варинтов, что мне удалось добиться. В других случаях - рендер просто не отображаеться (ну или висит где-нибудь очень далеко, что я его не вижу)
Доки открой и почитай -.-
Что я только не перечитал уже, и гуглил, и по форуму искал
glRotate(180, 1, 0, 0) - вращение вокруг оси x
glRotate(180, 0, 1, 0) - вращение вокруг оси y
glRotate(180, 0, 0, 1) - вращение вокруг оси z
Об этом вкурсе.
 
Последнее редактирование:
Сначала нужно сместить координаты в (0; 0; 0) чтобы центр координат был мир (в майне - игрок):
glTranslate(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ)
А потом уже смещать на координаты игрока и рисовать что тебе надо.
 
Пробовал, вот так:
Java:
float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks();
EntityPlayer player = Minecraft.getMinecraft().player;
double x = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
double y = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
double z = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
//GlStateManager.translated(-x, -y, -z);
GlStateManager.translated(0, 0, 0);
GlStateManager.rotate(180, 1, -1, 1);
GlStateManager.translated(-x, -y, -z);
но оно не работало
 
Последнее редактирование:
Я просто написал, как я до этого пробовал.
Я тебе дал строку которая
не работает. Я уже попробовал, как я понял RenderManager это просто сокращенный способ получить координаты игрока вот так:
Java:
float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks();
EntityPlayer player = Minecraft.getMinecraft().player;
double x = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
double y = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
double z = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;

В чём конкретно проблема: Да в том же, рендер неподвижен только на координате y, а по x и z он спокойно гуляет куда хочет при движении игрока. А также временами исчезает и выдаёт такую вот ересь:
где тут вставить лог? я не вижу такой кнопки:
[21:00:33] [Client thread/ERROR] [minecraft/Minecraft]: 1285: Out of memory
[21:00:33] [Client thread/ERROR] [minecraft/Minecraft]: ########## GL ERROR ##########
[21:00:33] [Client thread/ERROR] [minecraft/Minecraft]: @ Post render

Вот код:
Java:
GlStateManager.translate(0, 0, 0);
GlStateManager.rotate(180, 0, 1, 0);
GlStateManager.translate(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ);
 
Последнее редактирование:
@tox1cozZ
Java:
float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks();
EntityPlayer player = Minecraft.getMinecraft().player;
double x = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
double y = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
double z = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
GlStateManager.translate(0, 0, 0);
GlStateManager.rotate(180, 0, 1, 0);
GlStateManager.translate(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND); //блендинг
GL11.glBlendFunc(GL11.GL_ALPHA_SRC, GL11.GL_ONE_MINUS_ALPHA_SRC);
GlStateManager.bindTexture(0);
GlStateManager.color(120, 130, 296, 0.5);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex3f(x, y, z);
GL11.glVertex3f(x + width, y, z);
GL11.glVerted3f(x + width, y + height, z);
GL11.glVertex3f(x, y + height, z);
GL11.glEnd();
GL11.glDisable(GL11.GL_BLEND);
 
Последнее редактирование:
Боже, скоро в бан, это тихий ужас какой-то
Не забывай, что многие майнкрафтеры даже java не знают.

А для @Sk9zist совет, рано тебе еще в OpenGL залазить, практикуйся больше в самой java для начала.
 
Ты понимаешь что этот код будет рисовать прямоугольник ТОЛЬКО над одним игроком - тобой?
Если так и задумано - ок. Если нет - надо пробегаться по каждому игроку и рисовать.
И да, я объяснял что центр координат в майне и так уже находится на камере, смещать на координаты текущего игрока нет смысла - они уже там. Ну и поэтому координаты в данном случае нужно указывать относительно игрока:
Java:
float x = 0.0F;
        float y = 0.5F;
        float z = 0.0F;
        float width = 2.0F;
        float height = 1.0F;

        Minecraft mc = Minecraft.getMinecraft();
        EntityLivingBase player = mc.player;

        GlStateManager.rotate(System.currentTimeMillis() / 5 % 360, 0, 1, 0); // Заменишь на нужный угол, сейчас это вертушка :D
        GlStateManager.disableTexture2D();
        GlStateManager.enableBlend();
        GlStateManager.disableCull();
        GlStateManager.color(120.0F, 130.0F, 296.0F, 0.5F);
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex3f(x, y, z);
        GL11.glVertex3f(x + width, y, z);
        GL11.glVertex3f(x + width, y + height, z);
        GL11.glVertex3f(x, y + height, z);
        GL11.glEnd();
        GlStateManager.enableTexture2D();
        GlStateManager.disableBlend();
        GlStateManager.enableCull();
 
ТОЛЬКО над одним игроком - тобой?
Если рисовать это на одной координате то у всех клиентов рендер будет в одном и том же месте.

смещать на координаты текущего игрока нет смысла - они уже там.
Это верно.
Ваш код рендерит кубик в игроке. Он двигается за игроком, будучи в самом игроке. Штош, как его теперь поместить на нужные координаты? (отдаленные от игрока)
 
Штош, как его теперь поместить на нужные координаты?
Сдвинуть на минус вектор позиции игрока, тогда он окажется в 0,0,0
Потом сдвинуть на нужные координаты
 
Будет в мире на координатах (5; 5; 5):
Java:
        float x = 5.0F;
        float y = 5.0F;
        float z = 5.0F;
        float width = 5.0F;
        float height = 5.0F;

        Minecraft mc = Minecraft.getMinecraft();
        RenderManager renderManager = mc.getRenderManager();
        EntityLivingBase player = mc.player;

        GlStateManager.pushMatrix();
        GlStateManager.translate(-renderManager.viewerPosX + x, -renderManager.viewerPosY + y, -renderManager.viewerPosZ + z);
        GlStateManager.rotate(System.currentTimeMillis() / 5 % 360, 0, 1, 0);

        GlStateManager.disableTexture2D();
        GlStateManager.enableBlend();
        GlStateManager.disableCull();
        GlStateManager.color(120.0F, 130.0F, 296.0F, 0.5F);
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex3f(0, 0, 0);
        GL11.glVertex3f(0 + width, 0, 0);
        GL11.glVertex3f(0 + width, 0 + height, 0);
        GL11.glVertex3f(0, 0 + height, 0);
        GL11.glEnd();
        GlStateManager.enableTexture2D();
        GlStateManager.disableBlend();
        GlStateManager.enableCull();

        GlStateManager.popMatrix();
 
Спасимбо! Вы действительно, очень мне помогли!
 
Назад
Сверху