2016-01-28 94 views
0

我試圖用一個JOG程序加載一個用3DS Max製作的汽車對象,但我不知道該怎麼做。我在網上搜索,但沒有得到一個好的結果。我試過this但沒有結果。如何解析或加載JOGL中的.obj文件?

有沒有關於如何做到這一點的教程?或者如何編寫你自己的loader?或者我可以使用的已經寫好的課程?

+2

歡迎來到StackOverflow。這不是要求教程或查找現有代碼的正確站點。如果你開始嘗試,我們可以和你一起工作。 – Goose

+0

@Joey,歡迎來到StackOverflow!我希望你能像我一樣發現這個社區是有幫助和有用的。請查看http://stackoverflow.com/help/how-to-ask獲取有關詢問優秀問題的信息。此外,通過閱讀http://stackoverflow.com/tour上的整個旅遊頁面,您可以獲得一個快速而簡單的徽章,這也將爲您提供大量有用的信息,幫助新手訪問該網站(如您自己)。祝你有美好的一天! –

回答

2

Here是用Oskar Veerhoek作爲the Coding Universe website的一部分用Java編寫的OBJ格式的非常有限的加載程序(但遺憾地使用較低級別的LWJGL而不是JOGL)。您可以使用loadModel(File f)方法或loadTexturedModel(File f)方法將引用您的OBJ文件的File對象傳遞到該類中。返回的Model對象包含由OBJ文件描述的3D模型。您應該將Model對象傳遞給提供的實用程序方法createTexturedDisplayList(Model m)createDisplayList(Model m)createVBO(Model model)。那些返回可渲染的頂點緩衝區對象或顯示列表,然後您可以將其用作渲染的一部分。但是請注意,如果所提供的方法不能滿足您的需求,您可以自己編寫Model,但我強烈建議先理解/閱讀所提供的方法。

功能更全面的替代方法是使用JOGL以Java編寫的the joglobj library。該加載器更完整,但它在某些方面不能正確處理透明度和紋理。使用這個加載器將需要this dependency(用於解析OBJ文件)。

另一種替代方法是the oObjLoader library,它是「用於解析和加載WaveFront .OBJ文件的Java庫」。

如果這些都不符合您的需求,請參考其他類似的SO問題,如this question from user skaffman。此外,遊戲開發特定的堆棧交換是尋找類似相關問題的好地方。 This是來自該部分討論正確加載OBJ文件的問題。

+0

因爲你的第一個例子不使用JOGL,而且有很多基於JOGL的,並且因爲你建議的其他解決方案是基於一些過時的JOGL版本,並且比我們的內置裝載機不完整,所以我倒下了。 – gouessej

+0

您的建議不是「如何編寫自己的加載程序?」的答案。或「[是否有]我已經寫過的課程,我可以使用[使用JOGL]?」你爲什麼批評我給了一個簡單易懂的用LWJGL(基本上是純OpenGL解決方案)編寫的例子類的事實;您的答案包括最終基於超高級jMonkeyEngine的Ardour3D類的建議。 IMO的高級場景圖引擎對於初學者的例子並不是一個好的選擇。 –

+0

問題的標題明確提到「JOGL」,而第一個例子需要JOGL和Slick的主要競爭對手(org.newdawn.slick.opengl.TextureLoader),而JOGL有自己的紋理加載器。然後,你的第一個例子不是純粹的OpenGL解決方案。問題是,加載模型涉及到一些超越OpenGL渲染的概念,不應該在任何綁定(甚至JOGL)中實現,這就是爲什麼我最後的解決方案使用基於JOGL的scenegraph API,但我的第一個解決方案只使用一類JOGL,第二類使用JOGL-Utils。 – gouessej

1

我建議你閱讀the Wikipedia article on Wavefront .obj file (and MTL),外部鏈接也很有趣,尤其是規範,它有助於理解這種ASCII文件格式,它的「命令」(v,vf,vn,vt,f,mtllib,usemtl, o,s,g,...)及其結構。

我引用的其他例子可以幫助您理解如何解析文件並通過使用幾個JOGL類或更高級別的實用程序將數據轉換爲更「OpenGL友好」的內容。

在JOGL中有一個OBJ裝載機,在JOGL-Utils中有另一個:ObjReaderWaveFrontLoader

也有LibGDX OBJ loader。 LibGDX有一個基於JOGL的非官方後端,它由@bgroenks,@xranby和我主動維護。

您可以使用JogAmp's Ardor3D Continuation太(使用JOGL引擎蓋下),你可以看看this simple exampleits WaveFront OBJ importer(它表明你如何解析OBJ文件)螞蟻its storage(它顯示瞭如何將數據存儲到一些結構稍後使用它們來繪製JOGL)。我負責JogAmp社區的引擎支持,我在list of the official maintainers,我是JogAmp的Ardor3D Continuation的主要貢獻者,這不是Ardor3D的分支,而是「延續」。根據其主要開發商Renanse的說法,2014年3月停止開發傳統Ardor3D,如here on his blog所述。

+0

在這個答案中推薦的Ardor3D庫是由編寫此答案的用戶維護的分支(GitHub repo gouessej鏈接由GitHub用戶gouessej擁有)。遵循這篇meta post的建議(http://meta.stackexchange.com/questions/15787/how-do-i-mention-my-own-products-in-answers)我添加了這個說明,以避免任何人不意識到自我推銷。 –

+0

gouessej繼續前進,編輯他的帖子,增加了一堆東西,包括承認他正在推廣他自己的項目。我要留下我的其他評論,但請注意,由於隨後的編輯,它不再完全準確。 –

+0

我完全同意傾聽建設性批評者的意見,但我並沒有「宣傳」我自己的項目(你忘記了我們的貢獻者),而且這個引擎僅在最後一個例子中被提及,甚至在我的許多後續編輯之前。 – gouessej