我正在使用OpenGL ES 2.0嘗試我的iPod touch上的第一步。我想知道如何解決這個座標問題..OpenGL 2.0 ES座標
爲了更好的解釋,我試圖繪製一個四邊形,並使用頂點着色器旋轉/翻譯它(也因爲從我讀過的東西看來,這似乎是唯一的方法做它)。
由於我有一個iPod的工作,我有一個1.5 : 1
率和
glViewport(0, 0, backingWidth, backingHeight);
所以0,0
設置視口的剪裁中心,範圍應在-1.0, -1.0
,-1.0, 1.0
等(右?)
要繪製正方形我不得不爲x和y使用不同的值座標,因爲縱橫比的:
static const GLfloat lineV[] = {
-0.5f, 0.33f, 0.5f, 0.33f,
0.5f, 0.33f, 0.5f,-0.33f,
0.5f,-0.33f, -0.5f,-0.33f,
-0.5f,-0.33f, -0.5f, 0.33f,
-0.5f, 0.33f, 0.5f,-0.33f,
0.5f, 0.33f, -0.5f,-0.33f,
};
這是一個與兩條對角線的方形(我知道,使用索引的效率會比較高,但是這不是重點)..
然後我試着寫一個頂點着色器旋轉的對象移動時它:
void main()
{
m = mat4(cos(rotation), sin(rotation), 0.0, 0.0,
-sin(rotation), cos(rotation), 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
m2 = mat4(1.0);
m2[1][3] = sin(rotation)*0.8;
gl_Position = position*(m*m2);
}
它可以工作,但由於座標不一樣,四邊形在旋轉時會扭曲。我應該如何防止?我想如果有可能改變視錐體有不同的界限(在兩個軸上不是-1.0到1.0,所以在y軸上擴大將解決問題)。
另外有沒有更好的方法來使用矩陣?我的意思是,我習慣於使用glRotatef
而不必指定整個矩陣。是否有便利函數/構造函數來完成此任務?