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

Версия Minecraft
1.7.10
126
6
33
Суть такова: у меня имеется матрица ( двухмерный массив ) с информацией. Мне нужно используя элементы матрицы как пиксели построить текстуру для рендера, которая будет изменяться при изменении элементов. Каким образом можно подобное реализовать?
 
7,099
324
1,510
Можно каждый пиксель рисовать кк отдельный однотонный полигон. Соответственно текстура будет матрицей полигонов при рендере
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Можно каждый пиксель рисовать кк отдельный однотонный полигон
Ой хоспадееее, не надо плез
Ты собираешь из своей матрицы ByteBuffer загружаешь его как обычную текстуру в OpenGL, в гугле полно примеров.
А потом простой биндишь textureId и рисуешь.
 

CumingSoon

Местный стендапер
1,634
12
269
TextureUtil и всякие различные функции оттуда. Создай текстуру, залей туда данные и потом, при смене данных, меняй их в текстуре (glTexSubImage)
А вообще, просто сделай вопрос более конкретным и тебе быстрее помогут
 
126
6
33
есть же дефолтный класс 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();
 
Последнее редактирование:
126
6
33
Проблема решена.
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
 
Сверху