如何用JavaFX创建空心圆柱和截锥? [英] How to create hollow cylinder and truncated cone with JavaFX?

查看:307
本文介绍了如何用JavaFX创建空心圆柱和截锥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习JavaFX 3D。到目前为止,我还没有找到如何创建以下对象的方法:

I'm learning JavaFX 3D. So far I have not found a way how I can create the following objects:


  • 空心圆柱

  • 截断圆锥

有人可以给我一个简短的代码示例吗?

Can someone please give me a short code example?

任何帮助将不胜感激。 : - )

Any help will be appreciated. :-)

推荐答案

我知道这是一个老问题,但我一直在努力解决类似的问题所以这里是我的解决方案截锥:

I know it's an old question but I've been trying to solve similar problem so here is my solution for truncated cone:

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);
}

希望这有助于将来的某个人!

Hope this helps someone in the future!

这篇关于如何用JavaFX创建空心圆柱和截锥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆