Текстура BufferedImage не появляется в java3D - PullRequest
0 голосов
/ 13 апреля 2011

Я новичок в java3D и в stackoverflow.Моя проблема в том, что я пытаюсь добавить текстуру BufferedImage к прямоугольнику, и она не появляется.Я сохранил BufferedImage в файл, поэтому я уверен, что он не пустой."bi" - это BufferedImage.Кажется, все, что я могу найти о java3D, довольно устарело.Комментарии о командах над ним, а не ниже.

    QuadArray alap = new QuadArray(4, QuadArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);

    // [...] setting coordinates for the polygon (rectangle)

    Appearance alapAppearance = new Appearance();
    PolygonAttributes alapPa = new PolygonAttributes();

    alapAppearance.setPolygonAttributes(alapPa);

    alap.setTextureCoordinate (0, 0, new TexCoord2f(0.0f,0.0f));
    alap.setTextureCoordinate (0, 1, new TexCoord2f(1.0f,0.0f));
    alap.setTextureCoordinate (0, 2, new TexCoord2f(1.0f,1.0f));
    alap.setTextureCoordinate (0, 3, new TexCoord2f(0.0f,1.0f));
    //tryed in different order

    TextureAttributes texAttr = new TextureAttributes();
    texAttr.setTextureMode(TextureAttributes.REPLACE);
    TextureLoader loader = new TextureLoader(bi, TextureLoader.ALLOW_NON_POWER_OF_TWO);
    //Tryed with "RGB" flag too (as second parameter).
    Texture t1 = loader.getTexture();

t1.setBoundaryModeS(Texture.CLAMP_TO_EDGE);
t1.setBoundaryModeT(Texture.CLAMP_TO_EDGE);

    alapAppearance.setCapability(Appearance.ALLOW_TEXTURE_WRITE);
    alapAppearance.setCapability(Appearance.ALLOW_TEXTURE_ATTRIBUTES_WRITE);
    //I don't think it's really needed, but can't hurt I quess.
    alapAppearance.setTextureAttributes(texAttr);
    alapAppearance.setTexture(t1);

    tfg.addChild(new Shape3D(alap, alapAppearance));
    //tfg = transformGroup

1 Ответ

0 голосов
/ 14 апреля 2011

Хорошо, я нашел решение.Кажется, что TextureLoader.ALLOW_NON_POWER_OF_TWO заставляет загрузчик текстуры загружать текстуру, которая не имеет степени 2, но java3d все равно не растянет ее на многоугольнике.Возможно, это тоже где-то флаг, потому что загружать такую ​​текстуру, которую вы не можете использовать, очень бессмысленно.

...