簡體   English   中英

使用 OpenGL 的多邊形的透視投影

[英]Perspective projection for a polygon Using OpenGL

我正在嘗試使用 open-GL 實現透視投影但是當我應用 gluPerspective(0,0.5,0.5,5) 方法時,多邊形不會在透視圖中顯示,而是在正交視圖中顯示,這里是 output 在此處輸入圖像描述 任何人都可以幫助我的代碼:

#include<GL/glut.h>
float angle = 2;
void myinit(void)
{
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 5);
    //glFrustum(-0.5, 2.4, -0.5, 0.5, -0.5, 0.5);
    //glFrustum(-5.0, 5.0, -5.0, 5.0, 5, 100);
    gluPerspective(0,0.5,0.5,5);
}

void polygon(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 0.0, 1.0);
    //glLineWidth(2);
    //glRotatef(angle, 0.0, 0.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex3f(0.25, 0.25, 0.0);
    glVertex3f(0.75, 0.25, 0.0);
    glVertex3f(0.75, 0.75, 0.0);
    glVertex3f(0.25, 0.75, 0.0);
    //glVertex3f(0, 0.5, 0.0);
    glEnd();
    glFlush();
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(50, 100);
    glutInitWindowSize(1000, 1000);
    glutCreateWindow("Open Gl 2D Geometric Transformation");
    myinit();
    glutDisplayFunc(polygon);
    glutMainLoop();


    return 0;
}

gluPerspective的第一個參數是錯誤的:

 gluPerspective(0,0.5,0.5,5);

gluPerspective的第一個參數是以度為單位的垂直視場角。 該值必須大於 0.0 且小於 180。0.0 是無效參數並導致未定義的行為。 可能該指令根本沒有設置矩陣。

無論如何,如果你設置了一個正確的角度,那么幾何圖形就會被剪裁。 透視投影矩陣定義了一個視錐體 所有不在 near 平面和 fare 平面之間的幾何圖形都將被剪裁。 在您的情況下,近平面為 0.5,遠平面為 5.0。

通過沿負 z 軸移動幾何圖形,設置視圖矩陣並在近平面和遠平面之間轉換幾何圖形。 例如 (0, 0, -2.5)。

gluPerspective的第二個參數是縱橫比。 由於 window 的大小為 1000x1000,因此縱橫比必須為 1.0:

void myinit(void)
{
    glClearColor(1.0, 1.0, 1.0, 0.0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    GLdouble fov = 90.0; // 90 degrees
    GLdouble aspect = 1.0;
    GLdouble near_dist = 0.5;
    GLdouble far_dist = 5.0;
    gluPerspective(fov, aspect, near_dist, far_dist);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -2.5f); // near_dist < 2.5 < far_dist
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM