2012-10-03 208 views
0

這是我使用的代碼。2d旋轉opengl

#define ANGLETORADIANS 0.017453292519943295769236907684886f // PI/180 
#define RADIANSTOANGLE 57.295779513082320876798154814105f // 180/PI 

rotation = rotation *ANGLETORADIANS; 

cosRotation = cos(rotation); 
sinRotation = sin(rotation); 

for(int i = 0; i < 3; i++) 
{ 
    px[i] = (vec[i].x + centerX) * (cosRotation - (vec[i].y + centerY)) * sinRotation; 
    py[i] = (vec[i].x + centerX) * (sinRotation + (vec[i].y + centerY)) * cosRotation; 
    printf("num: %i, px: %f, py: %f\n", i, px[i], py[i]); 
} 

到目前爲止,它接縫我的Y值被fliped ..說我進入X = 1和Y = 1的值與45旋轉,你應該看到大約x = 0和y = 1.25十歲上下,但我得到x = 0 y = -1.25。

而且我的90度旋轉總是返回x = 0和Y = 0

P.S我知道我只是在我的中心值,而不是將其放回他們來自何處。我不需要把它們放回去,因爲我需要知道的是我現在得到的價值。

+0

你可以嘗試格式正確的代碼?這是一個痛苦,試圖讀取 – SinisterMJ

+0

@AntonRoth是的抱歉,我正在嘗試。其他人已經修復了它。我現在也知道如何做到這一點,對於造成不便,我感到抱歉。 –

+0

最簡單的是,在編輯器中你有一個{}字段。標記你的代碼,並按下該按鈕 - >你有代碼段。 – SinisterMJ

回答

2

您的支架放置看起來不合適我。我期望:

px[i] = (vec[i].x + centerX) * cosRotation - (vec[i].y + centerY) * sinRotation; 
py[i] = (vec[i].x + centerX) * sinRotation + (vec[i].y + centerY) * cosRotation; 
+0

謝謝,接縫的工作:3 –

1

您的括號內有誤。它應該是

px[i] = ((vec[i].x + centerX) * cosRotation) - ((vec[i].y + centerY) * sinRotation); 
py[i] = ((vec[i].x + centerX) * sinRotation) + ((vec[i].y + centerY) * cosRotation); 

代替

+0

沒錯這就是有點兒同以前的傢伙說,這也是作品謝謝。 –

+0

我知道,我們都基本同時回答。正當我在寫「來代替」的結尾,它告訴我另一種答案被張貼,所以這兩個答案是彼此秒內。 – SinisterMJ