2017-02-04 23 views
0

好的。我是OpenGL的新手和類似的東西。我正在使用LWJGL 3和JOGL(對於GLU),並且我在自學過程中完全停下來。現在我正嘗試使用GLU.gluPerspective(80, 4/3, 0.1, 10000);設置我的3D投影,但它給了我Cannot make a static reference to the non-static method gluPerspective(double, double, double, double) from the type GLU - 我知道這是什麼意思,但我不太確定爲什麼我得到了這個。我正在嘗試使用GLU.gluPerspective(),但它給我的靜態參考錯誤

我複製/粘貼來自LWJGL 3頁面的示例代碼以獲取我的大部分代碼。爲了繪製立方體,我使用了另一個我在網上找到的代碼。

的代碼是相當長的,所以你可以得到它at this pastebin link.

記在上面,線158到174使用自定義播放器類和鍵盤類,它是最小的一點,並沒有什麼影響什麼我正在做他們的錯誤。

那麼,爲什麼這會給我這個錯誤,儘管我實例化了一個新的Main()?我對Java的記憶有點生疏嗎? (該引擎收錄代碼是Main.java

+1

您不能將JOGL與另一個用於OpenGL API的Java綁定混合使用,它的設計目的不在於此。如果你想要堅持使用GLU或者使用沒有GLU的其他Java綁定,你可以用JOGL完全重寫你的代碼。 JOGL有一個根本不同的設計:http://jogamp.org/wiki/index.php/Why_Instance_Design混合這兩個API對我來說是一個非常糟糕的主意。您可以對這兩種API使用JOML,因爲它包含一些類似於gluPerspective的數學工具。 JOGL也能夠模擬固定管道,查看com.jogamp.opengl.util.PMVMatrix和FixedFuncUtil。 – gouessej

+0

但是,你不應該使用它,它是[不推薦使用的OpenGL](https://www.khronos.org/opengl/wiki/Legacy_OpenGL) – elect

回答

1

如在錯誤消息gluPerspective描述不是類GLU的靜態方法中,這意味着需要一個GLU對象叫它:

GLU glu = new GLU(); 
glu.gluPerspective(80, 4/3, 0.1, 10000); 

這是在JOGL user guide還解釋:

要使用GLU,通過新的GLU()在 開始你的前衛的簡單實例化一個對象GLU內存。在OpenGL上下文是最新的時候,GLU對象上的方法可以被稱爲 。由於GLU 實現不是線程安全的,因此應該爲給定線程中的每個GLEventListener或執行OpenGL渲染 的其他實體創建一個GLU對象 。

+0

爲了清楚起見,我是否應該重寫大部分代碼才能使用GLU或有一種方法可以使用我現有的代碼並鏈接我的新GLU對象和我現有的OpenGL設置? 編輯:我問,因爲我得到「沒有OpenGL上下文在這個當前線程」 –

+0

我不是專家,但我不認爲你可以混合JOGL和LWJGL。他們都用於相同的目標,所以我認爲你應該選擇使用其中一種。 –

+0

好的。這更有意義。謝謝。 –

相關問題