거대한 질량의 3D 모양으로 응용 프로그램을 만들고 있습니다. 테두리가 완전히 투명해야합니다. Shape3D, 특히 Box 및 Sphere에 테두리를 적용하는 방법을 찾으려고했지만 아무 것도 찾을 수 없습니다. 그래서 내 질문은 :javafx 테두리가있는 Shape3D
- Shape3D에 테두리를 추가하는 방법이 있습니까?
- 예, 그렇다면 어떻게해야합니까?
거대한 질량의 3D 모양으로 응용 프로그램을 만들고 있습니다. 테두리가 완전히 투명해야합니다. Shape3D, 특히 Box 및 Sphere에 테두리를 적용하는 방법을 찾으려고했지만 아무 것도 찾을 수 없습니다. 그래서 내 질문은 :javafx 테두리가있는 Shape3D
아니, 3D 형태에 테두리를 추가 할 수있는 옵션이 없습니다,하지만 당신은 (만하지만 상자 작동) 대신 매우 얇은 cyllinders를 사용할 수 있습니다
public void createBoxLines(double contW, double contH, double contD, double x, double y, double z) {
//You call this method to create a box with a size and location you put in
//This method calls the createLine method for all the sides of your rectangle
Point3D p1 = new Point3D(x, y, z);
Point3D p2 = new Point3D(contW + x, y, z);
Point3D p3 = new Point3D(x, contH + y, z);
Point3D p4 = new Point3D(contW + x, contH + y, z);
createLine(p1, p2);
createLine(p1, p3);
createLine(p3, p4);
createLine(p2, p4);
Point3D p5 = new Point3D(x, y, contD + z);
Point3D p6 = new Point3D(contW + x, y, contD + z);
Point3D p7 = new Point3D(x, contH + y, contD + z);
Point3D p8 = new Point3D(contW + x, contH + y, contD + z);
createLine(p5, p6);
createLine(p5, p7);
createLine(p7, p8);
createLine(p6, p8);
createLine(p1, p5);
createLine(p2, p6);
createLine(p3, p7);
createLine(p4, p8);
}
double strokewidth = 1;
public void createLine(Point3D origin, Point3D target) {
//creates a line from one point3d to another
Point3D yAxis = new Point3D(0, 1, 0);
Point3D diff = target.subtract(origin);
double height = diff.magnitude();
Point3D mid = target.midpoint(origin);
Translate moveToMidpoint = new Translate(mid.getX(), mid.getY(), mid.getZ());
Point3D axisOfRotation = diff.crossProduct(yAxis);
double angle = Math.acos(diff.normalize().dotProduct(yAxis));
Rotate rotateAroundCenter = new Rotate(-Math.toDegrees(angle), axisOfRotation);
Cylinder line = new Cylinder(strokewidth, height);
line.getTransforms().addAll(moveToMidpoint, rotateAroundCenter);
myGroup.getChildren().add(line);
}
createLine 방법에 별도로 사용할 수 있습니다 서로 다른 점 사이에 선을 만듬. 기본적으로 일부 블로그에서 복사했기 때문에 해당 메서드에 대한 많은 의견을 제공 할 수 없습니다. 나는 그 블로그를 다시 찾는 데 어려움을 겪고있다.
코드에 몇 가지 주석을 추가하여 코드의 기능을 명확히하는 것이 좋습니다. –
'drawMode'' DrawMode.LINE'을 사용하여 와이어 프레임을 그려야한다고 생각하지 않습니까? – fabian
API를 통해 JavaFX의 임의의 Shape3D에 테두리를 추가 할 수 없습니다. – Birdasaur
기본적으로 FXyz3d.org PolyLine3D 알고리즘과 같은 알고리즘을 사용하여 첫 번째 메쉬의 정점을 추적하는 두 번째 메쉬를 만들 수 있습니다. 기본적으로 하나의 메쉬로 스켈레톤 구조가 생성됩니다. 구현 한 알고리즘은 원래 메쉬의 패턴을 어느 정도 모방해야합니다. 이것은 아마도 특정 메쉬에 대한 맞춤형이어야합니다. 그런 일반적인 추적 알고리즘을 사용하는 것이 가능할 지 확신하지 못합니다. (적어도 JavaFX 3D에서) – Birdasaur