最近我開始使用JOGL,我知道如何在畫布上創建和繪製對象,但我找不到關於如何設置和旋轉攝像頭的教程或解釋。 我只找到源代碼,但由於我對此很新,所以沒有太多幫助。Java OpenGL Camera
有誰知道一個好的教程或地方開始?我google搜索,但無法找到任何東西(只適用於JOGL 1.5,我使用2.0)。
最近我開始使用JOGL,我知道如何在畫布上創建和繪製對象,但我找不到關於如何設置和旋轉攝像頭的教程或解釋。 我只找到源代碼,但由於我對此很新,所以沒有太多幫助。Java OpenGL Camera
有誰知道一個好的教程或地方開始?我google搜索,但無法找到任何東西(只適用於JOGL 1.5,我使用2.0)。
UPDATE
由於datenwolf指出我的解釋是聯繫在一起的OpenGL的2管道,該管道已被取代。這意味着如果你想避開已棄用的方法,你必須從世界空間進入屏幕空間。可悲的是,這個小小的腳註並沒有被附加到OpenGL示例代碼或宇宙中的每一個最後一點的評論。
當然,我不知道爲什麼使用現有的GL2管道必然是一件壞事,然後再選擇一個庫來完成相同的工作或自己構建一個庫。
ORIGINAL
我玩弄JOGL自己,雖然我與OpenGL的一些有限的經驗。 OpenGL使用兩個矩陣將所有通過它的3D點從3D模型空間轉換爲2D屏幕空間,Projection矩陣和ModelView矩陣。
投影矩陣設計用於補償3D世界和2D屏幕之間的平移,將投影到較低維的空間上。您可以通過Google搜索gluPerspective
獲取更多詳細信息,這是用於設置該矩陣的glut工具包中的一個函數。
另一方面,MatrixView負責將3D座標項從場景空間轉換到視圖(或相機)空間。這是如何完成取決於你如何代表相機。表示照相機的三種常用的方法是
哪一個使用將要求您編寫代碼來將表示轉換成你可以給的東西到OpenGL方法來設置ModelView矩陣,以及編寫代碼,而不是將用戶操作轉換爲對Camera數據的修改。
有許多JOGL中,演示和JOCL-演示涉及這類操作的演示。例如,this class被設計用作一種原始相機,它可以放大和縮小並圍繞場景的原點旋轉,但不能以其他方式旋轉。因此它僅表示爲3個浮標:X和Y旋轉以及Z距離。它適用其轉化爲模型視圖像這樣:
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0, 0, z);
gl.glRotatef(rotx, 1f, 0f, 0f);
gl.glRotatef(roty, 0f, 1.0f, 0f);
我目前正在嘗試用四元數+矢量+浮動使用Java Vecmath庫基於攝像頭,和我申請我的相機變換是這樣的:
Quat4d orientation;
Vector3d position;
double scale;
...
public void applyMatrix(GL2 gl) {
Matrix4d matrix = new Matrix4d(orientation, position, scale);
double[] glmatrix = new double[] {
matrix.m00, matrix.m10, matrix.m20, matrix.m30,
matrix.m01, matrix.m11, matrix.m21, matrix.m31,
matrix.m02, matrix.m12, matrix.m22, matrix.m32,
matrix.m03, matrix.m13, matrix.m23, matrix.m33,
};
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadMatrixd(glmatrix, 0);
}
1:這就是所謂的模型視圖,而不僅僅是查看矩陣的原因是因爲你其實可以推及模型視圖棧上彈出矩陣(這是所有的OpenGL變換矩陣我相信如此)。通常情況下,您可以擁有一疊完整的矩陣,這些矩陣表示場景圖中各項目相對於彼此的各種變換,最下面的矩陣表示相機變換,或者您有一個相機變換並將場景圖中的所有內容保存在世界空間座標中(這種類型擊敗了場景圖,但無論如何)。
2:在實踐中,您不會在代碼中看到gl.glMatrixMode(GL2.GL_MODELVIEW);
的調用,因爲除非您主動設置投影矩陣,否則GL狀態機將始終保持MODELVIEW模式。
,但我無法找到如何設置教程或解釋和旋轉的攝像頭
因爲是沒有的。 OpenGL不是一個場景圖。它主要是複雜的畫布和簡單的點,線和三角形繪圖工具。放置「物體」實際上意味着應用線性變換來在2D幀緩衝器上放置3維矢量。
所以不是放置「相機」,而是以相反的方式移動整個世界(轉換),以相反的方式移動相機,產生相同的結果。
,這可能是有幫助的http://www.land-of-kain.de/docs/jogl/ –
謝謝,我看到這個網站,但我認爲它使用JOGL 1.5,因爲大多數的方法是在不同的API我.. –
可能重複:檢查JOGL的pmvMatrix http://stackoverflow.com/a/13485670/398672的東西,有人問6個月後... – olamedia