2017-03-07 84 views
0

我寫了自己的3D遊戲引擎,並開始編寫遊戲。我使用的OBJ模型使用TurboSquid Royalty Free License保存和加密java類

基本上,它說我可以使用他們的OBJ文件,但必須實現一些內容,以避免用戶從我的程序中提取OBJ文件。 我已經寫了一個轉換器,它從OBJ文件中提取信息,並創建幾個浮點/整數數組[頂點,頂點座標,法線,切線...,指數]

這些數組稍後將用於創建VAO/VBO。所以我的想法是創建一個名爲OBJModelData的Java類,它包含這些數組。 OBJModelData器具Serializable。我的嘗試是將該類保存到一個文件中,並使用它們而不是OBJ文件,以便用戶無法查看和使用該內容。

我的嘗試是這樣的:

public void writeToFile(String file){ 
    File f = new File(OBJLoader.RES_LOC+ file +".dat"); 
    try { 
     ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f)); 
     out.writeObject(this); 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

這將導致一個名爲modelName.dat文件看起來是這樣的: enter image description here

顯然,逆向工程必須完成的重建我的陣列。我只是不喜歡它的書面方式。例如,已經序列化的類被寫入第一行。如果有人以某種方式管理我的引擎的源文件,通過做一些逆向工程,他可以輕鬆讀取文件。

是我的方法保存足以避免重新創建OBJ文件,我仍然可以使用這個方法來滿足許可條件或者是有沒有正常使用任何其他方式(例如,在其他遊戲/引擎)?

+2

最有不止「避免用戶提取OBJ檔案」,因爲僅僅是不可能的。如果有足夠的時間和奉獻精神,總是可以對其進行逆向工程。那麼牌照必須比這更多? – Vallentin

+0

通過這個鏈接,如果它可以幫助http://codereview.stackexchange.com/questions/66889/encrypt-and-decrypt-a-serializable-object – mhasan

+1

「如果要重新分發的東西,包括實際的3D產品文件中,TurboSquid的文件必須是一個更大的創作的一部分,而不是其他人可以下載的開放格式,大多數遊戲引擎,例如Unity和Unreal,都會自動處理這些。一般來說,爲了防止最終用戶獲得TurboSquid產品,你應該使用專有格式,無需反向工程就無法提取,導出或反編譯。「是官方聲明。但我不確定我的代碼是否滿足這些條件。我是一種逆向工程必須完成的...... – Luecx

回答

0

您的報價結束說:「無反向工程」,所以你不需要攜帶逆向工程。你只需要從OBJ「翻譯」到你創作的另一種格式,就像你一樣。