Как разместить 3d объекты друг за другом? - PullRequest
0 голосов
/ 14 января 2019

Я изначально написал программу, которая генерирует область 2D прямоугольников. Вдруг я хотел устроить изометрическую проекцию. Я думал, что самый простой способ сделать это - использовать 3D-прямоугольники. Я адаптировал код и в целом все получилось так, как я хотел. Однако возникла проблема, которую я не знаю, как решить. Каждый новый прямоугольник располагается как бы поверх остальных. Из-за чего появляется эффект рельефа местности. Я бы хотел, чтобы платформа была плоской. Ниже на экране вы все поймете. two muppets Я попытался поэкспериментировать с setTranslateZ (), но это никак не отразилось.

protected List fillingArea()
{
    manyPlacedSquares.add(new CustomBox(100,50,100, 0, 0, 0));
    for(int y = 0; y < numberOfSquares; y++)
    {
        for(CustomBox i: manyPlacedSquares)
        {
            CustomBox upBox = new CustomBox(100,50,100,i.getTranslateX()+70,i.getTranslateY()-50, i.getTranslateZ()-1 );
            manyPotentialSquares.add(upBox);
            CustomBox rightBox = new CustomBox(100,50,100,i.getTranslateX()-70,i.getTranslateY()-50,i.getTranslateZ()-1);
            manyPotentialSquares.add(rightBox);
            CustomBox belowBox = new CustomBox(100,50,100,i.getTranslateX()+70,i.getTranslateY()+50,i.getTranslateZ()-1);
            manyPotentialSquares.add(belowBox);
            CustomBox leftBox = new CustomBox(100,50,100,i.getTranslateX()-70,i.getTranslateY()+50,i.getTranslateZ()-1);
            manyPotentialSquares.add(leftBox);
        }
        System.out.println(manyPotentialSquares.size());
        System.out.println(manyPlacedSquares.size());
        System.out.println(manyPotentialSquares.get(1).getTranslateX());
        manyPotentialSquares.removeAll(manyPlacedSquares);
        System.out.println(manyPotentialSquares.size());
        index = randomGenerator.nextInt(manyPotentialSquares.size());
        manyPlacedSquares.add(manyPotentialSquares.get(index));
    }
    return manyPlacedSquares;
}

Пользовательское поле имеет простой контент и вряд ли понадобится, но на всякий случай я покажу его содержимое. Метод equals () переопределен для корректной работы removeall ()

public class CustomBox extends Box {
    Double tt;
    Double tt1;
    public CustomBox(double width, double height, double depth, double gtx, double gty, double gtz) 
        {
            super(width, height, depth);
            this.setTranslateX(gtx);
            this.setTranslateY(gty);
            this.setTranslateZ(gtz);
            tt = gtx;
            tt1 = gty;
        }

@Override
public boolean equals(Object obj)
{
    if(this.tt.equals(((CustomBox) obj).getTranslateX()) && this.tt1.equals(((CustomBox) obj).getTranslateY()))
        {
            System.out.println(tt + "  " + ((CustomBox) obj).getTranslateX());
            return true;
        }
    if (obj == null || obj.getClass() != this.getClass())
        {
            return false;
        }
           return false;
}


}

1 Ответ

0 голосов
/ 14 января 2019

Вы должны настроить JavaFX для правильного использования 3D. Особенно вы должны включить буферизацию глубины. Это объясняется в принятом ответе на этот вопрос здесь: Перекрывающиеся фигуры - неправильное поведение перекрывающихся фигур

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...