1.6+(Как повернуть картинку на определенный градус.

25
0
Здравствуйте форумчане, я новичок, но в Java вполне разбираюсь.
Вопрос замучал меня до смерти.

Я создаю переменную типа ResouceLocation[]
Код:
 private static final ResourceLocation[] panoramaTexture = new ResourceLocation[] {new ResourceLocation(ID.MODID + ":textures/gui/panorama_01.png")};

Примерно так.
Но когда я объявляю ее в drawPanorama, она у меня переворачивается набок.
Как примерно перевернуть ее?На 90 градусов.
Вот drawPanorama
Код:
  private void drawPanorama(int par1, int par2, float par3)
    {
        Tessellator tessellator = Tessellator.instance;
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glPushMatrix();
        GL11.glLoadIdentity();
        Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glPushMatrix();
        GL11.glLoadIdentity();
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_ALPHA_TEST);
        GL11.glDisable(GL11.GL_CULL_FACE);
        GL11.glDepthMask(false);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        byte b0 = 8;

        for (int k = 0; k < b0 * b0; ++k)
        {
            GL11.glPushMatrix();
            float f1 = ((float)(k % b0) / (float)b0 - 0.5F) / 64.0F;
            float f2 = ((float)(k / b0) / (float)b0 - 0.5F) / 64.0F;
            float f3 = 0.0F;
            GL11.glTranslatef(f1, f2, f3);
            GL11.glRotatef(MathHelper.sin(((float)this.panoramaTimer + par3) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(-((float)this.panoramaTimer + par3) * 0.1F, 0.0F, 1.0F, 0.0F);

            for (int l = 0; l < 6; ++l)
            {
                GL11.glPushMatrix();

                if (l == 1)
                {
                    GL11.glRotatef(0.0F, 0.0F, 1.0F, 0.0F);
                }

                if (l == 2)
                {
                    GL11.glRotatef(0.0F, 0.0F, 1.0F, 0.0F);
                }

                if (l == 3)
                {
                    GL11.glRotatef(0.0F, 0.0F, 1.0F, 0.0F);
                }

                if (l == 4)
                {
                    GL11.glRotatef(0.0F, 1.0F, 0.0F, 0.0F);
                }

                if (l == 5)
                {
                    GL11.glRotatef(0.0F, 1.0F, 0.0F, 0.0F);
                }

                this.mc.getTextureManager().bindTexture(titlePanoramaPaths[l]);
                tessellator.startDrawingQuads();
                tessellator.setColorRGBA_I(16777215, 255 / (k + 1));
                float f4 = 0.0F;
                tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - f4), (double)(1.0F - f4));
                tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + f4), (double)(1.0F - f4));
                tessellator.draw();
                GL11.glPopMatrix();
            }

            GL11.glPopMatrix();
            GL11.glColorMask(true, true, true, false);
        }
 
Если нужен поворот на 90 градусов, то ты просто UV координаты указал неправильно. Вот эти строки:
Код:
                tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - f4), (double)(1.0F - f4));
                tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + f4), (double)(1.0F - f4));
Первые три аргумента - это координаты вершины, последние два - UV-координаты (текстурные). Попробуй второй вершине поставить UV от первой, третьей UV от второй и т. д (ну или наоборот первой вершине UV от второй, если повернуть нужно в другую сторону). А как простой вариант - поверни изображение на текстуре xD
 
GloomyFolken написал(а):
Если нужен поворот на 90 градусов, то ты просто UV координаты указал неправильно. Вот эти строки:
Код:
                tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - f4), (double)(0.0F + f4));
                tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - f4), (double)(1.0F - f4));
                tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + f4), (double)(1.0F - f4));
Первые три аргумента - это координаты вершины, последние два - UV-координаты (текстурные). Попробуй второй вершине поставить UV от первой, третьей UV от второй и т. д (ну или наоборот первой вершине UV от второй, если повернуть нужно в другую сторону). А как простой вариант - поверни изображение на текстуре xD
Глооми?Если не правильно прочел - извиняюсь.
Да, именно с вертексами получилось, немного затупил.
А изменение(поворот и тп) работает в дебаг режиме?

Сколько багов в коде...Он рендерит картинку из неоткуда, я раньше задавал путь к текстуре, удалил текстуру ,он все равно ее рендерит._.
 
Agravaine написал(а):
Нет, в памяти где-то, наверное.
Хм.Глооми меня в конец запутал, в вертексах я нулик практически, мало чего понимаю, я вижу ты человек понимающий, не мог бы мне объяснить немножечко попонятнее?
 
Ну у видеокарты есть память...
Я так понял, в ней могла остаться текстура?
 
hohserg написал(а):
Ну у видеокарты есть память...
Я так понял, в ней могла остаться текстура?
Причем здесь память видео карты?
Я не понял как текстуру поменять.А точнее градус.
 
Devian написал(а):
Agravaine написал(а):
Нет, в памяти где-то, наверное.
Хм.Глооми меня в конец запутал, в вертексах я нулик практически, мало чего понимаю, я вижу ты человек понимающий, не мог бы мне объяснить немножечко попонятнее?
Глуми ;)

У тебя две разные проблемы: текстура повернута на 90 градусов и текстура продолжает рисоваться, хотя она удалена.

Проблема раз.
Поиграйся с аргументами к addVertexWithUV(). Надеюсь, сам всё поймешь. Вот так сделано у тебя сейчас (убрал баллшит из кода):
Код:
tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, f4, f4);
tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, 1.0F - f4, f4);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0F - f4, 1.0F - f4);
tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D, f4, 1.0F - f4);

А вот так текстура повернется на 90 градусов (сравни со своим кодом):
Код:
tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, f4, 1.0F - f4);
tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, f4, f4);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0F - f4, f4);
tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D,  1.0F - f4, 1.0F - f4);
Координаты вершин (первые три аргумента) остались те же, а UV-координаты (которые на текстуре) сдвинуты, т. е. у второй вершины UV от первой, у третьей UV от второй, у четвертой UV от третьей, у первой UV от четвертой.

Проблема два.
Без понятия, откуда оно грузит твою текстуру :D Если ты просто не перезапускаешь майн и сидишь в дебаг-режиме, то, естественно, текстура просто загружена в память и останется там до перезапуска майна. Если перезапускаешь, то значит, что правда куда-то копируется. Куда - без понятия, у меня ничего никуда не копируется.
 
undefined написал(а):
Код:
tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, f4, 1.0F - f4);
tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, f4, f4);
tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, 1.0F - f4, f4);
tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D,  1.0F - f4, 1.0F - f4);
Да вот различий нету, точнее не вижу, вправь руки.
 
Закрываем, понял как работать с вертексами, глуми(извиняюсь что первый раз не так писал)помог очень сильно.

Закрыто.
 
Назад
Сверху