2013-10-18 14 views
1

我嘗試使用下面的代碼爲皮膚添加到多維數據集,但不會對皮膚在所有的工作。我測試,看它是否會加入到一個默認的立方體,它會(但重複每邊,而不是包裹周圍,這就是爲什麼我想提出一個自定義的立方體,以防止這種完整的圖像)。任何幫助將不勝感激。剝皮定製3D立方體的JavaFX 8

private void buildGraphics() 
{ 
    Image dieImage = new Image(getClass().getResourceAsStream("images/die.gif")); 

    PhongMaterial material = new PhongMaterial(); 
    material.setDiffuseMap(dieImage); 
    material.setSpecularColor(Color.RED); 

    float hw = 100/2f; 
    float hh = 100/2f; 
    float hd = 100/2f; 

    float points[] = 
     { 
      hw, hh, hd, 
      hw, hh, -hd, 
      hw, -hh, hd, 
      hw, -hh, -hd, 
      -hw, hh, hd, 
      -hw, hh, -hd, 
      -hw, -hh, hd, 
      -hw, -hh, -hd, 
     }; 

    float tex[] = 
     { 
      100, 0, 
      200, 0, 
      0, 100, 
      100, 100, 
      200, 100, 
      300, 100, 
      400, 100, 
      0, 200, 
      100, 200, 
      200, 200, 
      300, 200, 
      400, 200, 
      100, 300, 
      200, 300 
     }; 

    int faces[] = 
     { 
      0, 10, 2, 5, 1, 9, 
      2, 5, 3, 4, 1, 9, 
      4, 7, 5, 8, 6, 2, 
      6, 2, 5, 8, 7, 3, 
      0, 13, 1, 9, 4, 12, 
      4, 12, 1, 9, 5, 8, 
      2, 1, 6, 0, 3, 4, 
      3, 4, 6, 0, 7, 3, 
      0, 10, 4, 11, 2, 5, 
      2, 5, 4, 11, 6, 6, 
      1, 9, 3, 4, 5, 8, 
      5, 8, 3, 4, 7, 3 
     }; 

    TriangleMesh mesh = new TriangleMesh(); 
    mesh.getPoints().addAll(points); 
    mesh.getTexCoords().addAll(tex); 
    mesh.getFaces().addAll(faces); 

    MeshView box = new MeshView(mesh); 
    box.setMaterial(material); 

    graphicGroup.getChildren().add(box); 

    Box box2 = new Box(100, 100, 100); 
    box2.setTranslateX(150); 
    box2.setMaterial(material); 


    graphicGroup.getChildren().add(box2); 
    world.getChildren().add(graphicGroup); 
} 
+0

得到的答案從PavelSafrata對甲骨文OTN我的問題,TEX COORDS必須成正比...... –

+1

所以在這種情況下,我的質地COORDS應該如下:「代碼」浮動TEX [] = { 0.25F ,0F, 0.5F,0F, 0F,0.33f, 0.25F,0.33f, 0.5F,0.33f, 0.75f,0.33f, 1F,0.33f, 0F,0.66f, 0.25 f,0.66f, 0.5f,0.66f, 0.75f,0.66f, 1f,0.66f, 0.25f,1f, 0.5f,1f}; –

回答

0

你是正確的......我也一直在玩弄使基本形狀..像膠囊,高度圖,圓環等...

的texCoords是一種痛苦,但臉上都當做更復雜的形狀時更是一種痛苦。

當你評論,texCoords應該是你的矩形圖像之間的0.0(0%)的值,和1.0(100%)

我還一直沒能找出我texCoords我的圓環.. 。

我仍然認爲幕後的人需要建立TriangleMesh的擺脫他們的系統。

三維點非常有意義的點[],但他們使用的浮動[] ... 同樣與texCoords ...的Point2D將使更加適合恕我直言.. 的面孔[]是確定.. 。由於這是一個簡單的整數[] ...

我甚至可能只是創建一個以這種方式處理事情SimpleMesh類......反正,很高興你理解了它。

+1

Java的目前缺乏[值的對象(http://openjdk.java.net/jeps/169)意味着使用的物體,如三維點的陣列(用3名成員),消耗更多的內存比float數組,比如當前使用的。另外,浮點數組很可能直接輸入到較低層的本地渲染邏輯(通過JNI),而不是經過像Point3D對象所需的轉換。您始終可以爲基於Point3D對象工作的JavaFX創建一個新的更高級別的API層,但效率相對較低。 – jewelsea

+0

感謝您的信息。我想我是想說,這將是更漂亮,如果有像三維點(X,Y,Z)或的Vector3(X,Y,Z)一類,用於創建點,一個映射到ud/texCoords類似於FloatMap的2d的類。它在for循環中更容易。我一直在創建一個MeshMaker,允許你看到頂點並用鼠標添加點... – jdub1581