使用OpenGL进行多边形的透视投影

拉娜·萨米(RanaSamy)

我正在尝试使用open-GL实现透视投影,但是当我应用gluPerspective(0,0.5,0.5,5)方法时,多边形未在透视图中显示,而在正交视图中显示,而是输出,在此处输入图片说明任何人都可以帮助我的代码:

#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;
}
拉比德76

to的第一个参数gluPerspective是错误的:

gluPerspective(0,0.5,0.5,5);

第一个参数gluPerspective是垂直视角,以度为单位。该值必须大于0.0且小于180。0.0是无效的参数,会导致未定义的行为。该指令可能根本没有设置矩阵。

无论如何,如果设置了正确的角度,则几何将被裁剪。透视投影矩阵定义了“视锥”裁剪不在票价平面和票价平面之间的所有几何图形。在您的情况下,近平面为0.5,远平面为5.0。

设置视图矩阵,并通过沿负z轴移动几何图形在近平面和远平面之间转换。例如(0,0,-2.5)。

的第二个参数gluPerspective是纵横比。由于窗口的大小为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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用iOS进行多边形地理围栏

来自分类Dev

使用多边形包含

来自分类Dev

使用多边形包含

来自分类Dev

VBO内的OpenGL分隔多边形

来自分类Dev

OpenGL中的多边形撕裂

来自分类Dev

OpenGL不填写多边形

来自分类Dev

VBO内的OpenGL分隔多边形

来自分类Dev

排序多边形的点以进行绘制

来自分类Dev

将线段投影到多边形网格上

来自分类Dev

如何使用opengl-es 2.0在android中填充多边形?

来自分类Dev

使用C ++在OpenGL中纹理3d多边形

来自分类Dev

使用C ++在OpenGL中移动自动旋转的3d多边形

来自分类Dev

使用GLScene或OpenGL for Delphi使纹理适合4点多边形/平面

来自分类Dev

如何使用多边形在opengl中建模椭圆体

来自分类Dev

使用OpenGL VBO绘制数千个多边形

来自分类Dev

使用gIntersection循环多边形裁剪

来自分类Dev

使用matplotlib绘制运动多边形

来自分类Dev

使用设计器绘制多边形

来自分类Dev

如何使用EaselJS绘制多边形?

来自分类Dev

使用openLayers绘制多边形

来自分类Dev

使用matplotlib转换多边形的动画

来自分类Dev

使用OSMnx提取约束多边形

来自分类Dev

使用矩阵变换多边形

来自分类Dev

如何对多边形使用polygonPointTest函数?

来自分类Dev

如何使用OpenCV绘制多边形?

来自分类Dev

使用boost的多边形联合

来自分类Dev

使用gIntersection循环多边形裁剪

来自分类Dev

使用 pixijs 渲染多边形

来自分类Dev

Solr-多边形搜索-按距离对多边形中心的结果进行排序