我正在學習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