2009-12-22 46 views
1

所以我試圖在橫向模式下渲染我的程序......但是我遇到了一些麻煩的問題。爲了在我的地圖上下移,我必須有一個負偏移量。如果我保持當前正值yOffset爲100,那麼地圖會向下滾動而不是向上滾動。爲什麼是這樣?我不樂意把負面的y座標看到地圖。有什麼辦法可以扭轉這種情況,所以當yOffset爲正值時,地圖會以相反的方向滾動?爲什麼我的y座標反向

 float yOffset = 100; 
    float xOffset = 0; 
    glOrthof(0 - yOffset, 
      320 - yOffset, 
      480 + xOffset, 
      0 + xOffset, 
      -10000.0f,10000.0f); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity();  
    glTranslatef(320.0f, 0.0f, 0.0f); 
    glRotatef(90.0, 0.0, 0.0, 1.0); 

    static const GLfloat squareVertices[] = { 
    0.0f, 0.0f, 
    1024.0f, 0.0f, 
    0.0f, 1024.0f, 
    1024.0f, 1024.0f 
}; 



static const GLfloat texCoords[] = { 
    0.0, 1.0, 
    1.0, 1.0, 
    0.0, 0.0, 
    1.0, 0.0 
}; 


glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_TEXTURE_2D); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY);  

glTexCoordPointer(2, GL_FLOAT, 0, texCoords); 
glVertexPointer(2, GL_FLOAT, 0, squareVertices);   


glBindTexture(GL_TEXTURE_2D, mapTexture); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 


glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisable(GL_TEXTURE_2D); 
glDisable(GL_BLEND); 

回答

1

OpenGL uses a "right-handed" coordinate system。要切換Y方向,你可以這樣做:

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glScalef (1.0f, -1.0f, 1.0f); 
// multiply view transforms as usual... 
// multiply model transforms as usual... 
+1

請不要切換你的y方向。只需使用調整後的座標系。 – 2009-12-22 18:32:21

+0

我也不會推薦它 - 但它確實回答了他的問題。 – luke 2009-12-22 18:37:21

+1

如果你這樣做,並且你面對背面剔除,一定要扭轉你的多邊形點的順序。他們不是逆時針方向,而是順時針方向。 – 2009-12-23 04:45:15

0

OpenGL的反轉Y軸座標,相對於UIKitCGxyz等) - 或反之亦然,這取決於你的觀點。

0

也許交換這些值:-10000.0f,10000.0f

2

你的y座標是負的,因爲你正在做的320x480的屏幕旋轉90度,可能是因爲你在橫向和縱向不玩。在矢量數學旋轉90度可表示爲:

(X,Y)成爲(-Y,X)

當您提供-yOffset進入X邊界和+xOffset到這是發生在調用glOrtho() Y邊界。

至於糾正這一點,我有一個「如何3D數學再次工作」的時刻,所以也許其中一個其他罰款響應者會幫助你。

...

(老版本的響應,我不認爲這是正確的了,但可能會有所幫助的):

兩個想法:

您可能會被混淆事實是,當你在OpenGL中轉換你的矩陣時,你不會移動相機。你在移動這個世界。要移動相機,實際上需要將世界向下移動。但是,這可能不是你的問題,取決於你如何改變。我注意到你旋轉了90度左右的X.我忘記了哪一個,但是這會把你的+ Z變成+ Y和+ Y變成-Z,或者它會把你的+ Z變成-Y,你的+ Y到+ Z。這可能是您的軸反轉的來源。您可以嘗試以其他方式旋轉(-90),或者您可以不旋轉,並使用原生座標方向。

相關問題