如何将3d对象相互放置?

时间:2019-01-14 09:02:26

标签: javafx

我最初编写了一个程序,该程序生成一个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 :(得分:0)

您必须配置JavaFX才能正确使用3D。特别是您必须打开深度缓冲。在此问题的可接受答案中对此进行了解释:Overlaping Shapes - wrong overlapping shapes behaviour