Круглые показатели

Версия Minecraft
1.7.10
1,470
19
189
Как сделать типа такого? 

rust_ico.jpg


Для прямых использую drawTexturedModalRect
 
Решение
1ca4138916fe.png

Код:
public void drawStats(double xC, double yC)
 {
 GL11.glPushMatrix();
 GL11.glDisable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_BLEND);
 double x, y;
 GL11.glColor4f(0.2f, 0.2f, 0.2f, 1);
 Tessellator tess = new Tessellator();
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 tess.addVertex(xC, yC, 0);
 for(int i = 0;i<=30;i++)
 {
 x = (16*Math.sin(Math.toRadians(i*(360/30)))) + xC;
 y = (16*Math.cos(Math.toRadians(i*(360/30)))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();
 
 float hp = Minecraft.getMinecraft().thePlayer.getHealth();
 float maxHP = Minecraft.getMinecraft().thePlayer.getMaxHealth();
 GL11.glColor4f(1f, 0f, 0f, 1)...

timaxa007

Модератор
5,831
409
672
Типа рендерить две картинки. Та которая будет накладываться на другое, типа с помощью вершин создать полигон так, чтобы он рендерился подобию часов. полигон будет выглядеть не круглым, круглым будет картинка.
 
1,470
19
189
timaxa007 написал(а):
Типа рендерить две картинки. Та которая будет накладываться на другое, типа с помощью вершин создать полигон так, чтобы он рендерился подобию часов. полигон будет выглядеть не круглым, круглым будет картинка.

Можешь про полигон или про саму систему что-либо скинуть/написать?
 
1,976
68
220
Хех, да, интересно...
В теории, нужно сделать красный альфа-кружок и сверху него полигон на три точки, с одной в центре и две ЗА кругом. Потом нужно пошаманить либо с блендингом, либо с масками, чтобы в результате наложения красный круг исчезал, как в молнии исчезает вода (не баг, а фича хд)... А вот как это делать на практике - понятия не имею...
Но имею, где посмотреть - Botania. Когда в инвентаре жмёшь ctrl с лексикой выдаёт подсказку, а так же таймер рунаалтаря сделан в виде кружочка.
 

timaxa007

Модератор
5,831
409
672
То что у меня было в идеи не сработало.
В ботании используется GL11.GL_TRIANGLE_FAN и цикл для отрисовки круга.
Может потом попробую другой вариант, того чего я хотел, когда будет время.
 
1,470
19
189
Нашёл такой способ

Код:
public static void drawCircle(float posX, float posY, float radius, int num_segments, int color) {
        float f = (color >> 24 & 255) / 255.0F;
        float f1 = (color >> 16 & 255) / 255.0F;
        float f2 = (color >> 8 & 255) / 255.0F;
        float f3 = (color & 255) / 255.0F;
        // Tessellator tessellator = Tessellator.instance;
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        // GL11.glShadeModel(GL11.GL_SMOOTH);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glColor4f(f1, f2, f3, f);
        
        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(posX, posY); // center of circle
        for (int i = num_segments; i >= 0; i--) {
            double theta = i * (Math.PI*2) / num_segments;
            GL11.glVertex2d(posX + radius * Math.cos(theta), posY + radius * Math.sin(theta));
        }
        GL11.glEnd();
        
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
    }
Но он не работает
 
1,470
19
189
AlexSocol написал(а):
Ну шо ты ещё хош?  :D
Тебе дали несколько вариантов, среди них и очень лёгкие - просто берёшь и рендеришь кружочки по фреймам ._.

Ни ежа не работает
 
Nix13Chanel написал(а):
AlexSocol написал(а):
Ну шо ты ещё хош?  :D
Тебе дали несколько вариантов, среди них и очень лёгкие - просто берёшь и рендеришь кружочки по фреймам ._.

Ни ежа не работает

Сделай как я писал,самый простой вариант.-.
 
1,470
19
189
Biter7789 написал(а):
Nix13Chanel написал(а):
AlexSocol написал(а):
Ну шо ты ещё хош?  :D
Тебе дали несколько вариантов, среди них и очень лёгкие - просто берёшь и рендеришь кружочки по фреймам ._.

Ни ежа не работает

Сделай как я писал,самый простой вариант.-.

Рисовать 100 картинок для кислорода?
 
1,470
19
189
LVL UP


Этот код не работает
Код:
public static void drawCircle(float posX, float posY, float radius, int num_segments, int color) {
       float f = (color >> 24 & 255) / 255.0F;
       float f1 = (color >> 16 & 255) / 255.0F;
       float f2 = (color >> 8 & 255) / 255.0F;
       float f3 = (color & 255) / 255.0F;
       // Tessellator tessellator = Tessellator.instance;
       GL11.glEnable(GL11.GL_BLEND);
       GL11.glDisable(GL11.GL_TEXTURE_2D);
       // GL11.glShadeModel(GL11.GL_SMOOTH);
       GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
       GL11.glColor4f(f1, f2, f3, f);
       
       GL11.glBegin(GL11.GL_TRIANGLE_FAN);
       GL11.glVertex2f(posX, posY); // center of circle
       for (int i = num_segments; i >= 0; i--) {
           double theta = i * (Math.PI*2) / num_segments;
           GL11.glVertex2d(posX + radius * Math.cos(theta), posY + radius * Math.sin(theta));
       }
       GL11.glEnd();
       
       GL11.glEnable(GL11.GL_TEXTURE_2D);
       GL11.glDisable(GL11.GL_BLEND);
   }
 
Nix13Chanel написал(а):
Biter7789 написал(а):
Nix13Chanel написал(а):
AlexSocol написал(а):
Ну шо ты ещё хош?  :D
Тебе дали несколько вариантов, среди них и очень лёгкие - просто берёшь и рендеришь кружочки по фреймам ._.

Ни ежа не работает

Сделай как я писал,самый простой вариант.-.

Рисовать 100 картинок для кислорода?
Намана же
 
1,470
19
189
Biter7789 написал(а):
Nix13Chanel написал(а):
Biter7789 написал(а):
Nix13Chanel написал(а):
AlexSocol написал(а):
Ну шо ты ещё хош?  :D
Тебе дали несколько вариантов, среди них и очень лёгкие - просто берёшь и рендеришь кружочки по фреймам ._.

Ни ежа не работает

Сделай как я писал,самый простой вариант.-.

Рисовать 100 картинок для кислорода?
Намана же

Ещё по 20 картинок голода/брони и ещё 100 жажды.
 
Nix13Chanel написал(а):
Biter7789 написал(а):
Nix13Chanel написал(а):
Biter7789 написал(а):
Nix13Chanel написал(а):
Ни ежа не работает

Сделай как я писал,самый простой вариант.-.

Рисовать 100 картинок для кислорода?
Намана же

Ещё по 20 картинок голода/брони и ещё 100 жажды.

Намана :D
 
Сверху