Как отрендерить прицел на экране?

svk

1,185
3
Очень странно, есть картинка 1024х256.
Но есть проблемы: при её рендере она повторяется 0_o
Я пытался стабилизировать её GL11.glScalef(); но при изменении расширения экрана всё сбивается.
Но и это ещё не всё, почему-то она не растягивается по Y, а перемещается 0_o.

Рендерю так, может в этом вся проблема?
Код:
        this.drawTexturedModalRect(e.resolution.getScaledWidth() - 201 + 9, e.resolution.getScaledHeight() - 33 + 9, 0, 54, 95, 6);
 
Ну я посмотрел, чёт я не понимаю почему только под 256х256?
Код:
        float f = 0.00390625F;
        float f1 = 0.00390625F;
        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + 0) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + 0) * f1));
        tessellator.draw();
 
Потому что
Код:
        float f = 0.00390625F;
        float f1 = 0.00390625F;
Это 1 / 256.
f - width
f1 - height
Подставляешь нужное значение (1024 и 256) и делишь на них единицу, получаешь новые f и f1.
UV-координаты расположены в пределах от 0 до 1, для этого они нормализуются: координаты просто делятся на длину и высоту изображения.
Собственно,
f = 1 / WIDTH - 1 пиксель в нормализованных координатах (по длине)
f1 = 1 / HEIGHT - 1 пиксель в нормализованных координатах (по высоте)
 
Oldestkon написал(а):
Потому что
Код:
        float f = 0.00390625F;
        float f1 = 0.00390625F;
Это 1 / 256.
f - width
f1 - height
Подставляешь нужное значение (1024 и 256) и делишь на них единицу, получаешь новые f и f1.
UV-координаты расположены в пределах от 0 до 1, для этого они нормализуются: координаты просто делятся на длину и высоту изображения.
Собственно,
f = 1 / WIDTH - 1 пиксель в нормализованных координатах (по длине)
f1 = 1 / HEIGHT - 1 пиксель в нормализованных координатах (по высоте)
Уууу, спасибо огромное.
 
Ладно, я так понял что-бы прицел всегда был чётко по центру экрана, надо отрендерить картинку к примеру 2000х2000 и сместить её по 1000 пикселей в сторону, и будет всегда по центру?

Но вот незадача, при изменении экрана майнкрафт растягивает/стягивает матрицу, как от этого избавится?

А если экран будет не квадратным, всеравно по центру будет рендер?
 
>>А если экран будет не квадратным
Ты видел круглые мониторы?Я ,например,когда скейлил,то смещал,ибо уезжать чуть чуть
 
cucugag написал(а):
>>А если экран будет не квадратным
Ты видел круглые мониторы?Я ,например,когда скейлил,то смещал,ибо уезжать чуть чуть
У меня например прямоугольный, 1024х1028.
 
cucugag написал(а):
1650x1050,но всё нормально
А теперь сделай окно 1024х1028 и смени размер интерфейса, если до сих пор по центру, то кинь код и скажи где рендерил.
 
Код:
float scale = 0.5F;
                int xMid = (res.getScaledWidth() / 2) - 8;
                int yMid = (res.getScaledHeight() / 2) - 4;
                GL11.glEnable(GL11.GL_BLEND);
                GL11.glDisable(GL11.GL_DEPTH_TEST);
                GL11.glDepthMask(false);
                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                GL11.glDisable(GL11.GL_ALPHA_TEST);
                GL11.glScalef(scale, scale, scale);
                mc.renderEngine.bindTexture(new ResourceLocation());
                mc.ingameGUI.drawTexturedModalRect((int) (xMid / scale), (int) (yMid / scale), 0, 0, 32, 32);
                GL11.glDisable(GL11.GL_BLEND);
                GL11.glEnable(GL11.GL_DEPTH_TEST);
                GL11.glDepthMask(true);
 
Назад
Сверху