Построение динамической текстуры из матрицы

Версия Minecraft
1.7.10
126
6
33
Суть такова: у меня имеется матрица ( двухмерный массив ) с информацией. Мне нужно используя элементы матрицы как пиксели построить текстуру для рендера, которая будет изменяться при изменении элементов. Каким образом можно подобное реализовать?
 
Можно каждый пиксель рисовать кк отдельный однотонный полигон. Соответственно текстура будет матрицей полигонов при рендере
 
Можно каждый пиксель рисовать кк отдельный однотонный полигон
Ой хоспадееее, не надо плез
Ты собираешь из своей матрицы ByteBuffer загружаешь его как обычную текстуру в OpenGL, в гугле полно примеров.
А потом простой биндишь textureId и рисуешь.
 
TextureUtil и всякие различные функции оттуда. Создай текстуру, залей туда данные и потом, при смене данных, меняй их в текстуре (glTexSubImage)
А вообще, просто сделай вопрос более конкретным и тебе быстрее помогут
 
есть же дефолтный класс DynamicTexture
Через него сейчас и пытаюсь, но пока получается только белый полигон.
test.png
Код:
 int[] ints = {
            0xffffffff,0xffffffff,0xFF000000,0xffffffff,
            0xffffffff,0xFF000000,0xFF000000,0xffffffff,
            0xffffffff,0xffffffff,0xffffffff,0xffffffff,
            0xFF000000,0xffffffff,0xFF000000,0xffffffff
              };

public static DynamicTexture blank = new DynamicTexture(4, 4);

for (int i = 0; i < blank.getTextureData().length; i++) {
            blank.getTextureData()[i] = ints[i];
        }
        blank.updateDynamicTexture();

...
 
GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_TEXTURE_2D);

        GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
        RenderHelper.disableStandardItemLighting();
        OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F);

        GL11.glTranslatef(0.5F, 0.0F, 0.5F);
        GL11.glRotatef(180F - 90.0F * side, 0F, 1F, 0F);

        GL11.glTranslatef(0.0F, 0.0F, 0.501F);

        GL11.glBindTexture(GL11.GL_TEXTURE_2D, blank.getGlTextureId());
        GL11.glBegin(GL11.GL_QUADS);
        {
            GL11.glVertex3d(0.5F, 0, 0);
            GL11.glVertex3d(0.5F, 1, 0);
            GL11.glVertex3d(-0.5F, 1, 0);
            GL11.glVertex3d(-0.5F, 0, 0);
        }
        GL11.glEnd();

        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_LIGHTING);
        GL11.glPopAttrib();
 
Последнее редактирование:
Проблема решена.
Java:
private final static DynamicTexture blank = new DynamicTexture(4, 4);

public int[] ints = {
            0xffffffff,0xffffffff,0xff555555,0xffffffff,
            0xffffffff,0xff555555,0xff555555,0xffffffff,
            0xffffffff,0xffffffff,0xffffffff,0xffffffff,
            0xff555555,0xffffffff,0xff555555,0xffffffff
                    };

...
    
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);

GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
RenderHelper.disableStandardItemLighting();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F);

GL11.glTranslatef(0.5F, 0.0F, 0.5F);
GL11.glRotatef(180F - 90.0F * side, 0F, 1F, 0F);

GL11.glTranslatef(0.0F, 0.0F, 0.501F);

TextureUtil.uploadTexture(blank.getGlTextureId(), ints, 4,4);

Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
        {
            tessellator.addVertexWithUV(0.5F, 0, 0, 1,0);
            tessellator.addVertexWithUV(0.5F, 1, 0, 1,1);
            tessellator.addVertexWithUV(-0.5F, 1, 0, 0,1);
            tessellator.addVertexWithUV(-0.5F, 0, 0, 0,0);
        }
tessellator.draw();

GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
test.png
 
Назад
Сверху