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

sk9zist :l

Исправился
981
18
157
Повернуть рендер куба. (обычный, плоский, расположен по вертикали пока тестовый) Как провернуть?
Сейчас такой код:
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...

tox1cozZ

aka Agravaine
8,455
598
2,892
В glRotate передается угол и ОСЬ, вокруг которой вращается объект. Зачем ты туда передаешь y координату? Доки открой и почитай -.-
glRotate(180, 1, 0, 0) - вращение вокруг оси x
glRotate(180, 0, 1, 0) - вращение вокруг оси y
glRotate(180, 0, 0, 1) - вращение вокруг оси z
 

sk9zist :l

Исправился
981
18
157
Зачем ты туда передаешь y координату
Так это просто я скинул наилучший из варинтов, что мне удалось добиться. В других случаях - рендер просто не отображаеться (ну или висит где-нибудь очень далеко, что я его не вижу)
Доки открой и почитай -.-
Что я только не перечитал уже, и гуглил, и по форуму искал
glRotate(180, 1, 0, 0) - вращение вокруг оси x
glRotate(180, 0, 1, 0) - вращение вокруг оси y
glRotate(180, 0, 0, 1) - вращение вокруг оси z
Об этом вкурсе.
 
Последнее редактирование:

sk9zist :l

Исправился
981
18
157

tox1cozZ

aka Agravaine
8,455
598
2,892
Сначала нужно сместить координаты в (0; 0; 0) чтобы центр координат был мир (в майне - игрок):
glTranslate(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ)
А потом уже смещать на координаты игрока и рисовать что тебе надо.
 

sk9zist :l

Исправился
981
18
157
Пробовал, вот так:
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);
но оно не работало
 
Последнее редактирование:

sk9zist :l

Исправился
981
18
157
Я просто написал, как я до этого пробовал.
Я тебе дал строку которая
не работает. Я уже попробовал, как я понял 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);
 
Последнее редактирование:

sk9zist :l

Исправился
981
18
157
@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);
 
Последнее редактирование:
170
2
53
Боже, скоро в бан, это тихий ужас какой-то
Не забывай, что многие майнкрафтеры даже java не знают.

А для @Sk9zist совет, рано тебе еще в OpenGL залазить, практикуйся больше в самой java для начала.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Ты понимаешь что этот код будет рисовать прямоугольник ТОЛЬКО над одним игроком - тобой?
Если так и задумано - ок. Если нет - надо пробегаться по каждому игроку и рисовать.
И да, я объяснял что центр координат в майне и так уже находится на камере, смещать на координаты текущего игрока нет смысла - они уже там. Ну и поэтому координаты в данном случае нужно указывать относительно игрока:
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();
 

sk9zist :l

Исправился
981
18
157
ТОЛЬКО над одним игроком - тобой?
Если рисовать это на одной координате то у всех клиентов рендер будет в одном и том же месте.

смещать на координаты текущего игрока нет смысла - они уже там.
Это верно.
Ваш код рендерит кубик в игроке. Он двигается за игроком, будучи в самом игроке. Штош, как его теперь поместить на нужные координаты? (отдаленные от игрока)
 
7,099
324
1,510
Штош, как его теперь поместить на нужные координаты?
Сдвинуть на минус вектор позиции игрока, тогда он окажется в 0,0,0
Потом сдвинуть на нужные координаты
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Будет в мире на координатах (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();
 

sk9zist :l

Исправился
981
18
157
Спасимбо! Вы действительно, очень мне помогли!
 
Сверху