2013-10-24 69 views
4

我想在JavaFX 8應用程序中創建一個模型,它將有〜400000個多邊形。而且我不需要任何紋理,只需要簡單的顏色。通常有必要有這樣的事情:是否可以在沒有紋理的JavaFX 8中創建三維模型?

float[] points = { 
    -5, 5, 0, 
    -5, -5, 0, 
    5, 5, 0, 
    5, -5, 0 
}; 
float[] texCoords = { 
    1, 1, 
    1, 0, 
    0, 1, 
    0, 0 
}; 
int[] faces = { 
    2, 2, 1, 1, 0, 0, 
    2, 2, 3, 3, 1, 1 
}; 

TriangleMesh mesh = new TriangleMesh(); 
mesh.getPoints().setAll(points); 
mesh.getTexCoords().setAll(texCoords); 
mesh.getFaces().setAll(faces); 

如果我用這個代碼,而不texCoordsfaces陣列,它,當然,不能正常工作。那麼是否有可能創建沒有紋理的三維模型?

回答

5

簡答

你必須定義所有的點,面和紋理座標的TriangleMesh爲網格,以在Java 8渲染

一些解釋

有效

您正在爲您的型號使用TriangleMesh。這些面描述了用於繪製網格的三角形。如果您不提供面,則系統無法知道構成要渲染的多邊形的三角形。

這只是一個實現細節(記錄在TriangleMesh javadoc中),您必須爲您的網格提供紋理座標值,即使在您的情況下,您將使用單一漫反射顏色進行渲染無關緊要的是什麼。

Java 8僅定義了用於呈現3D形狀(如網格)的單個材質。該材料是PhongMaterial。使用PhongMaterial,您不需要提供用於渲染材質的圖像紋理,可以通過調用material.setDiffuseColor(Color.BLUE)來爲材質使用基本顏色(例如藍色)。每個多邊形將根據phong shading algorithm進行着色,並考慮場景圖中的其他項目,如點光源,環境光線,透明區域,遮擋區域,鏡面高光等。這可以讓您真實地查看您的模型(如果所有內容多邊形只是塗成藍色,它會顯示爲藍色斑點,並且您無法辨別模型的內部細節)。

還有其他可以使用的着色技術,如flat shadinggouraud shading或自定義着色算法,但使用這些着色技術的材料在Java 8中不受支持 - 您必須使用PhongMaterial。

現在,如果將PhongMaterial的漫反射顏色設置爲純色並且不爲PhongMaterial設置任何其他值,則提供給TriangleMesh的紋理座標值無關緊要。提供紋理座標,以便着色器可以從材質中查找用於渲染多邊形的像素顏色。由於材質具有單一統一的顏色,因此您可以指定任何有效的紋理座標(例如0到1之間的任何值),並且它將返回相同的顏色。所以,就你而言,如果你不想爲你的模型計算紋理座標,你可以將所有的紋理座標值設置爲0或1,並且你會得到相同的渲染輸出。

相關問題