2013-04-24 275 views
1

我想在opengl中繪製一個圓,但我似乎無法獲得正確的座標,所以無論使用什麼方法,我總是得到一個省略號。當前的代碼如下:OpenGL圓形繪圖變橢圓

void Ball::Render() { 
    float center_position_x = _body->GetWorldCenter().x; 
    float center_position_y = _body->GetWorldCenter().y; 
    float radius = static_cast<b2CircleShape*>(_body->GetFixtureList()->GetShape())->m_radius; 

    glBegin(GL_LINE_STRIP); 
     for(float angle = 0; angle <= 360; ++angle) { 
      float angleInRadians = glm::radians(angle); 
      float x = glm::cos(angleInRadians); 
      float y = glm::sin(angleInRadians); 

      glVertex3f(x,y,0); 
     } 
    glEnd(); 
} 

(我知道的代碼應該吸取在原點的圓,但即使如此,它不是一個完美的圓,如果我理解正確的話應該在半徑原點畫一個圓= 1)我用

另一方法是: http://slabode.exofire.net/circle_draw.shtml http://www.opengl.org/discussion_boards/showthread.php/167955-drawing-a-smooth-circle

這是我的OpenGL窗口設置代碼(這是一個存根程序所以我開始硬編碼值): gluOrtho2D(-10, 15, -10, 15);

+3

聽起來像高寬比問題。你如何處理? – 2013-04-24 17:15:51

+0

@MichaelDorgan哦,耶穌。張貼作爲答覆,所以我可以接受它。 *在我身上的恥辱* – 2013-04-24 17:21:32

回答

1

使用gluOrtho2D(-WIDOWS_WIDTH,WIDOWS_WIDTH,-WINDOWS_HEIGHT,WINDOWS_HEIGHT);

通過您正在使用的固定管道在2013年有了一個頂點着色器的方式,這將是多容易理解。

+0

_How上earth_將頂點着色器,使這更容易理解?我的意思是,辭去固定管道離開是可靠的建議,但它並不能幫助一個位與投影/寬比解決問題。 – 2013-04-24 19:12:50

+0

這是一個存根。一旦其他部分穩定,我將把它轉換爲可編程管線。 – 2013-04-24 19:19:50

+0

@保羅 - 揚這是很難實現的,它需要更多的知識。儘管如此,在頂點着色器中使用實際的正投影矩陣使得一切都更清晰。 – felknight 2013-04-25 05:13:25

1

由gluOrtho2d定義的2D投影矩陣的長寬比必須與您正在渲染的視口/窗口相同,否則您會注意到您正在渲染的圖像出現扭曲。您可以使用上述gluOrtho2d語句或寫它的另一種方式是 -

浮動AR =(浮動)WINDOWWIDTH/WINDOWHEIGHT;

gluOrtho2D(-1 * ar,ar,-1,1)