2017-06-03 66 views
0

我目前正在嘗試在swift中平滑我的obj模型,無論是使用SCNGeometry還是MDLMesh都適用。有沒有辦法在swift 3中平滑對象/模型?

我發現正式文件顯示有「subdivisionLevel」屬性,用於在SCNGeometry中進行細分和平滑。但是,它沒有按預期工作。

對於水平= 1-2,沒有什麼變化顯然

對於水平= 3-5,仍然沒有明顯變化,但應用滯後

以下是我的實驗和代碼的截圖,有還有什麼我可以嘗試平滑?

subdivisionLevel = 0: http://imgur.com/7BM9wp6

subdivisionLevel = 5: http://imgur.com/mipaYMP

(正如你可以看到,銳邊腰和臂仍然存在)

代碼:

//load obj 
let path = Bundle.main.path(forResource: "model_longshirt", ofType: "obj")! 
let fileUrl = URL(fileURLWithPath: path) 
let asset = MDLAsset(url: fileUrl) 
guard let object = asset.object(at: 0) as? MDLMesh else { 
    fatalError("ERROR_FAILED_TO_GET_MESH_FROM_ASSET") 
} 

//load material 
let scatteringFunction = MDLScatteringFunction() 
let material = MDLMaterial(name: "baseMaterial2", scatteringFunction: scatteringFunction) 
let texPath = Bundle.main.path(forResource: "model_LongSleeve_texture_3", ofType: "jpg")! 
let texUrl = URL(fileURLWithPath: texPath) 
let materialProperty = MDLMaterialProperty(name: "baseTexture2", semantic: MDLMaterialSemantic.baseColor, url: texUrl) 
material.setProperty(materialProperty) 

//attach to node 
let scnGeometry = SCNGeometry(mdlMesh: object) 
scnGeometry.subdivisionLevel = 5 
objNode = SCNNode(geometry: scnGeometry) 
objNode.geometry?.firstMaterial = scnMaterial 

任何幫助或暗示都是值得讚賞的。謝謝。

+0

我也面臨同樣的問題。你有沒有找到解決方案? –

+0

不幸的是,我終於裝載了更流暢的另一個模型。 – adayoegi

+0

我覺得Scenekit是面對正常計算,而不是基於頂點引起這個問題。 –

回答

1

如果您導入的網格具有不共享邊的面,那麼您會在屏幕截圖中獲得明顯的摺痕。

A B  C A BC D 
+----+-----+ +----+----+ 
| |  | | | | 
+----+-----+ +----+----+ 
D E  F E FG H 

左邊的模型將是平滑的,因爲這兩個四邊形共享一個邊緣,右邊的一個不會,因爲這兩個四邊形有自己的內部邊緣。

相關問題