我正在学习JavaFX 3D。到目前为止,我还没有找到一种方法,我怎样才能创建下列对象:如何用JavaFX创建空心圆柱体和圆锥体?
- 空心圆柱
- 圆台
可有人请给我一个短的代码示例?
任何帮助将不胜感激。 :-)
我正在学习JavaFX 3D。到目前为止,我还没有找到一种方法,我怎样才能创建下列对象:如何用JavaFX创建空心圆柱体和圆锥体?
可有人请给我一个短的代码示例?
任何帮助将不胜感激。 :-)
第一个 - 创建一个圆柱体,并使用两个不同的外观对象 - 一个用于圆柱体,一个用于两个基底。对于两个基地,使用不可见的外观(渲染属性)。有关如何设置不同外观的信息,请设置线程: http://forum.java.sun.com/thread.jspa?threadID=663825&tstart=0
第二个 - 使用裁剪平面夹住圆柱体的底部和顶部,并且您有一个空心圆柱体。
这两种方法会给你一个空心圆柱体具有完全空的内部。
如果你正在寻找有墙壁与给定的厚度,还有一个布尔运算设定在互联网上公布。创建一个大圆柱体,并减去一个较小的圆柱体。有关布尔操作集的信息,请设置以下线程:http://forum.java.sun.com/thread.jspa?threadID=658612&tstart=0
最后,您自己创建圆柱体的几何图形真的很容易,并且它可以通过循环很容易地实现自动化。我会创建四个独立的几何图形:一个用于内部渲染面的内部圆柱体,一个用于外部圆柱体,外部渲染面,底部一个,中间和底部有一个孔的圆盘渲染,一个用于顶部,另一个中间有孔的光盘,以及渲染的顶部表面。
这都可以用三角形条阵列很容易地完成。
对不起,但您的所有链接都已损坏... – mamgoo
我知道这是一个老问题,但我一直在试图使这里解决类似的问题,是我截锥的解决方案:
public class Cone extends Group{
int rounds = 360;
int r1 = 100;
int r2 = 50;
int h = 100;
public Cone() {
Group cone = new Group();
PhongMaterial material = new PhongMaterial(Color.BLUE);
float[] points = new float[rounds *12];
float[] textCoords = {
0.5f, 0,
0, 1,
1, 1
};
int[] faces = new int[rounds *12];
for(int i= 0; i<rounds; i++){
int index = i*12;
//0
points[index] = (float)Math.cos(Math.toRadians(i))*r2;
points[index+1] = (float)Math.sin(Math.toRadians(i))*r2;
points[index+2] = h/2;
//1
points[index+3] = (float)Math.cos(Math.toRadians(i))*r1;
points[index+4] = (float)Math.sin(Math.toRadians(i))*r1;
points[index+5] = -h/2;
//2
points[index+6] = (float)Math.cos(Math.toRadians(i+1))*r1;
points[index+7] = (float)Math.sin(Math.toRadians(i+1))*r1;
points[index+8] = -h/2;
//3
points[index+9] = (float)Math.cos(Math.toRadians(i+1))*r2;
points[index+10] = (float)Math.sin(Math.toRadians(i+1))*r2;
points[index+11] = h/2;
}
for(int i = 0; i<rounds ; i++){
int index = i*12;
faces[index]=i*4;
faces[index+1]=0;
faces[index+2]=i*4+1;
faces[index+3]=1;
faces[index+4]=i*4+2;
faces[index+5]=2;
faces[index+6]=i*4;
faces[index+7]=0;
faces[index+8]=i*4+2;
faces[index+9]=1;
faces[index+10]=i*4+3;
faces[index+11]=2;
}
TriangleMesh mesh = new TriangleMesh();
mesh.getPoints().addAll(points);
mesh.getTexCoords().addAll(textCoords);
mesh.getFaces().addAll(faces);
Cylinder circle1 = new Cylinder(r1, 0.1);
circle1.setMaterial(material);
circle1.setTranslateZ(-h/2);
circle1.setRotationAxis(Rotate.X_AXIS);
circle1.setRotate(90);
Cylinder circle2 = new Cylinder(r2, 0.1);
circle2.setMaterial(material);
circle2.setTranslateZ(h/2);
circle2.setRotationAxis(Rotate.X_AXIS);
circle2.setRotate(90);
MeshView meshView = new MeshView();
meshView.setMesh(mesh);
meshView.setMaterial(material);
//meshView.setDrawMode(DrawMode.LINE);
cone.getChildren().addAll(meshView);
Rotate r1 = new Rotate(90, Rotate.X_AXIS);
cone.getTransforms().add(r1);
getChildren().addAll(cone);
}
希望这可以帮助别人的未来!
我站在JavaFX的年初,我有几个3D例子中查看和Netbeans的尝试。我的问题是如何计算两个对象的TriangleMesh? – mamgoo
那么,你可以[从thingsiverse下载一个圆柱体模型](http://www.thingiverse.com/thing:35331/#files),并用[interactive mesh importer](http://www.interactivemesh .ORG /模型/ jfx3dimporter.html)。但是,也许你不想要预先生成的模型,也许你实际上想要实现一种算法来为代码中的形状生成三角形网格,在这种情况下,我会建议您尝试自己解决问题并发布示例代码如果你遇到问题。相关:http://stackoverflow.com/questions/19459012/how-to-create-custom-3d-model-in-javafx-8。 – jewelsea
“...要实现一个算法来为代码中的形状生成一个三角形网格。” - 是的,你是对的,因此我正在寻找一个示例代码来计算一个空心圆柱体,第一个步。 – mamgoo