2017-10-14 98 views
0

我想用OpenGL旋轉一個圓形,但旋轉時只顯示一半的圓形。我猜想init()有什麼問題。這裏是代碼:只看到一半的物體時旋轉opengl

float angle = 0.0f; 

void display(void) 
{ 

    glClearColor(1.0f, 1.0f, 1.0f,1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


    glColor3f(0.0, 0.0, 0.0); 
    glPushMatrix(); 
    //glTranslatef(x, y, 0); // Move circle to desired location. 
    glRotatef(angle, 0, 0, 1); 
    drawCircle(10.0, 50.0); 

    glPopMatrix(); 

    glutSwapBuffers(); 
} 

void timer(int val) 
{ 
    angle += 0.5f; 
    glutTimerFunc(val, timer, val); 
    glutPostRedisplay(); 
} 

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-15.0, 15.0, -15.0, 15.0, 0.0, 200); 
    } 

int main(int argc, char **argv) 
{ 
    .. 
    glutDisplayFunc(display); 

    glutTimerFunc(10, timer, 10); 

    init(); 
    glutMainLoop(); 
    return 0; 
} 

回答

0

由於您的正交投影中近平面爲0,我假設在近一半的圓上被近平面夾住。

投影矩陣描述了從場景的3D點到視口的2D點的映射。它從眼睛空間轉換到剪輯空間,剪輯空間中的座標通過用剪輯座標的w分量轉換爲標準化設備座標(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的範圍內。 NDC之外的每個幾何都被裁剪掉。
在正交投影中,眼圖空間中的座標線性映射到標準化的設備座標。

enter image description here

這意味着,所有這些是在長方體,由leftrightbottomtopnearfar限定的幾何形狀,被描繪在視口。如果幾何圖形不在近平面和遠平面之間,則不繪製。您必須以這種方式選擇近距離和遠距離的平面圖,所有幾何圖形都處於兩者之間。 left,right, bottom,top,nearfar的值由glOrtho設置。像這樣調整你的代碼:

glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);