我有一個使用JOGL在Java中編寫的小型開放GL應用程序。Open GL轉換
我撲我的頭撞在牆上試圖找到應用轉換
基本上我想要做到的是有彼此相鄰的兩個對象的當前方式。基本上我創建對象(計算所有三角形的方法 - 我知道這是工作的,因爲兩個對象都顯示出來,它們只是彼此重疊),然後在顯示器中將它們放入VBO並調用drawElements。我的問題是我看不到任何示例或教程在線,不使用glTranslatef,glRotatef和glScalef,我已經被告知已經過時並且曾經是舊開放GL的固定功能方面的一部分。
編輯:(以前的代碼刪除)
史詩失敗代表我。當他說他的着色器代碼時,我認爲他的意思是加載和編譯着色器的.java文件。它只是打我,他的意思是在一個glsl文件中的SHADER CODE。我現在看到他有3個mat4變量,它們保存了rx,ry和rz。奇怪的是,即使我設置了一個縮放和平移矩陣,我的形狀不再出現。旋轉矩陣按照人們設想的設置,最後一行是「glPosition = rz * ry * rx * vPosition;」我試着宣佈翻譯和比例矩陣,然後做「= s * t * rz * ry * rx * vPosition」,但沒有骰子。
這是當前shader代碼:
attribute vec4 vPosition;
uniform vec3 theta;
uniform vec3 trans;
uniform vec3 scale;
void main()
{
// Compute the sines and cosines of each rotation
// about each axis
vec3 angles = radians (theta);
vec3 c = cos (angles);
vec3 s = sin (angles);
// rotation matricies
mat4 rx = mat4 (1.0, 0.0, 0.0, 0.0,
0.0, c.x, s.x, 0.0,
0.0, -s.x, c.x, 0.0,
0.0, 0.0, 0.0, 1.0);
mat4 ry = mat4 (c.y, 0.0, -s.y, 0.0,
0.0, 1.0, 0.0, 0.0,
s.y, 0.0, c.y, 0.0,
0.0, 0.0, 0.0, 1.0);
mat4 rz = mat4 (c.z, -s.z, 0.0, 0.0,
s.z, c.z, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
//mat4 t = mat4 (1.0, 0.0, 0.0, trans.x,
// 0.0, 1.0, 0.0, trans.y,
// 0.0, 0.0, 1.0, trans.z,
// 0.0, 0.0, 0.0, 1.0);
//mat4 s = mat4 (scale.x, 0.0, 0.0, 0.0,
// 0.0, scale.y, 0.0, 0.0,
// 0.0, 0.0, scale.z, 0.0,
// 0.0, 0.0, 0.0, 1.0);
gl_Position = rz * ry * rx * vPosition;
//gl_Position = s * t * rz * ry * rx * vPosition;
}
所以基本上,如果我去掉底部的兩個矩陣,但留下出現相同的,沒什麼glPosition聲明。此外,註釋掉的glPosition語句不起作用(儘管我並不感到驚訝,但在矩陣乘法方面我不太好)。我也嘗試過只是s * vPosition,只是爲了嘗試只能縮放,但再次沒有任何可見的東西。
這功課嗎? – Lukasz 2012-02-09 21:58:40
是的,這是一個計算機圖形類的作業。大部分任務是學習用於顯示三角網格的openGL命令(即創建一個VBO並將其發送到gpu,而不是glBegin()和glEnd())。但是他沒有讓我們知道我們應該如何處理轉換。從我的互聯網搜索中,一切都指向了使用glRotatef等。但是當我今天向他詢問時,他說這是一箇舊標準,現在它受着色器控制。但是,他的着色器程序代碼中沒有任何處理它的代碼,並且他在回覆電子郵件時非常糟糕。 – user1028885 2012-02-09 22:12:22
「我看不到任何示例或教程在線,不使用glTranslatef,glRotatef和glScalef」[你看?](http://www.opengl.org/wiki/Getting_started#Tutorials_and_How_To_Guides)可能不會使用JOGL,但你應該能夠很好地翻譯它們。那些使用純基於着色器的技術的前五者。 – 2012-02-09 22:17:50