簡體   English   中英

如何將3D .obj對象表示為3D數組?

[英]How to represent a 3D .obj object as a 3D array?

有沒有什么方法可以將3D模型表示為3D陣列? 是否有任何庫將.obj或.blend文件作為輸入並給出相同的數組表示?

我以為我會切片對象並將切片導出到圖像。 然后我會在opencv中使用這些圖像為每個切片構建數組。 最后,我將組合所有切片的所有數組,最終獲得我的.obj文件的3D數組表示。 但是我放棄了一半,因為讓圖像切片彼此對齊是一個痛苦的漫長過程。

有沒有其他基於索引的表示我可以用來代表代碼中的3D模型?

3D陣列對我來說非常方便。

Binvox可用於從.obj文件生成3D模型的體素表示。

Binvox-rw-py可用於讀取和解析上面生成的.binvox文件。

這是我用來獲得一個numpy數組:

>>> import binvox_rw
>>> with open("chair.binvox","rb") as f:
...   ml = binvox_rw.read_as_3d_array(f)
... 
>>> type(ml.data)
<type 'numpy.ndarray'>
>>> ml.data.shape
(32, 32, 32)

pygame的有OBJFileLoader類。 PyWavefront具有3D對象模型。

如果我理解正確,您想要創建3D模型的體素表示嗎? 像人類可見的顯示器?

我會使用上面推薦的一個OBJ文件加載器將模型導入OpenGL程序。 旋轉並縮放到XYZ所需的任何對齊方式。

然后使用片段着色器繪制對象,該片段着色器丟棄任何Z <0.001或Z> = 0.002的像素(或者無論分辨率如何工作 - 我只是試圖解釋該方法)。 這將為您提供存儲或保存的第一個圖像切片。 這次清除並再次繪制,丟棄Z <0.002或Z> = 0.003 ...因為它是相同位置的相同模型,所有切片都將對齊。

但是,您是否知道OBJ(以及幾乎所有其他3D格式)都是表面描述,而不是實體? 它們像折紙模型一樣內部空洞。 因此,您的3D數組表示將基本為空。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM