2016-11-25 61 views
2

我已經能夠創建一個MDLMesh並將其轉換爲SCNGeometry以在SceneKit中呈現。但是我沒有能夠在我的網格或幾何圖形中獲得摺痕支撐。使用摺痕支持生成MDLMesh?

我只是想驗證我正在採取正確的步驟爲我的網格添加摺痕支撐。

  1. 創建MDLSubmeshTopology
  2. 對於新的拓撲對象分配MDLMeshBuffers到edgeCreaseIndices,edgeCreases和Int到edgeCreaseCount性能。
  3. 用拓撲對象創建MDLSubmesh。

我不是在尋找特定的解決方案,只是一個如何去增加摺痕支持到網格的一般想法。任何有此經驗的人都會很棒。

+0

我從來沒有見過任何SceneKit摺痕示例代碼或文章。如果你發現了什麼,請寫出來! –

+0

是的,我搜索了很多,無法真正找到任何有關將摺痕實施到網格或幾何。如果我找到有用的東西,我會用它更新帖子。到目前爲止,我試圖在SceneKit幾何和ModelIO網格中添加摺痕,但沒有運氣。但很高興看到有人對此主題感興趣。感謝您的評論。 – Phi

回答

1

SceneKit有edgeCreasesElementedgeCreasesSource以及vertexCrease語義。

有關更多信息,請參閱SCNGeometry.subdivisionLevel的文檔。

+0

根據您的回答,最有可能的問題是我輸入edgeCreasesElement和edgeCreasesSource的數據。感謝您抽出時間指引我走向正確的方向。 – Phi

+0

任何人都有幸從第三方工具中導出數據,可以用這些語義讀取數據? Blender和Maya 2016都不會將摺痕出口到DAE。 –

+0

@Erik我發現導出與邊緣摺痕相關的數據的唯一格式是FBX,但我使用的是Maya LT 2017,所以我的選項有限。 – Phi

1

假設您已將數據準備爲四個字節整數的邊緣對,並將摺痕值設置爲浮點型,以下方法應該可行。

geometry.edgeCreasesSource = [SCNGeometrySource geometrySourceWithData:ecsData 
                 semantic:SCNGeometrySourceSemanticEdgeCrease 
                 vectorCount:creaseCount 
                floatComponents:YES 
               componentsPerVector:1 
               bytesPerComponent:4 
                 dataOffset:0 
                 dataStride:sizeof(float)]; 
    geometry.edgeCreasesElement = [SCNGeometryElement geometryElementWithData:eceData 
                 primitiveType:SCNGeometryPrimitiveTypeLine 
                 primitiveCount:creaseCount 
                 bytesPerIndex:4]; 
+0

謝謝尼克,當我有機會時,我會試試這個! – Phi