2010-01-15 197 views
1

我正在使用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而不必指定整個矩陣。是否有便利函數/構造函數來完成此任務?

回答

0

從我看到的沒有提供過剩或支持功能。基本上我通過在構建頂點時使用相同的座標並使用頂點着色器在右側縱橫比上對y軸進行縮放來解決此問題。

0

glViewport()的第一個參數不是中心,它是左下角的座標。

你或許應該設立一個投影是把你的方面考慮,通常使用gluPerspective()(如果GLU是提供ES)。