【问题标题】:using gluPerspective in OpenGL在 OpenGL 中使用 gluPerspective
【发布时间】:2009-12-28 07:35:11
【问题描述】:

我正在执行我的 OpenGL 程序,但我碰巧遇到了问题, 你能找到它的问题吗?

它以y轴为中心旋转一个平面 当我使用glOrtho 时它工作正常,但gluPerspective 不是。

gluPerspective 存在一些问题,因为当我将角度更改为 0 时,我只能看到一些东西,但看不到全部。但是当我将其更改为 45 时。屏幕上什么也没有出现,我没有得到关于近值和远值的线索。

 #include iostream  
 #include "Xlib.h"  
 #include "gl.h"  
 #include "glu.h"  
 #include "glut.h"  
 #include math.h  
void setupRC()  
{  
    glClearColor(1,0,0,1);  
    glColor3f(0,0,0);  
}  
void timerfunc(int value)  
{  
    glutPostRedisplay();  
    glutTimerFunc(1, timerfunc ,1);  
}  
void RenderScene()   
{  
    glColor3f(0,0,0);  
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
    static GLfloat rot = 0.0f,x =0.0f , y=1.0f , z=0.0f;  
    rot++;  
    glPushMatrix();  

    glRotatef(rot,0.0,1.0,0.0);  
    glBegin(GL_POLYGON);  
        glVertex3i(1,-1,0);  
        glVertex3i(1,1,0);  
        glVertex3i(-1,1,0);  
        glVertex3i(-1,-1,0);  
        glVertex3i(1,-1,0);  

    glEnd();  
    glPopMatrix();  
    if (rot == 360)  
        rot = 0;  
    glutSwapBuffers();  
}  
void ChangeSize(GLint w, GLint h)  
{  
    if(h==0)  
        h = 1;  
    GLfloat aspectratio = (GLfloat)w/(GLfloat)h;  

    glViewport(0,0,w,h);  
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();  
    gluPerspective(45.0f, aspectratio, 1,1000);  
    /*if(w <= h)  
        glOrtho(-100,100,-100/aspectratio, 100/aspectratio, 1,-1);  
    else   
        glOrtho(-100*aspectratio, 100*aspectratio , -100,100,1,-1);*/  
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  

}  

int main(int argc , char **argv)  
{  
    glutInit(&argc, argv);  
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);  
    glutInitWindowSize(800,600);  
    glutInitWindowPosition(0,0);  
    glutCreateWindow("chelsea");  
    glutTimerFunc(1, timerfunc , 1);  
    setupRC();  
    glutDisplayFunc(RenderScene);  
    glutReshapeFunc(ChangeSize);  
    glutMainLoop();  

    return 0;  
}  

【问题讨论】:

  • 也许创建一个更具描述性的标题?
  • 使用完整的单词和标点符号使您的问题更容易阅读,从而更轻松地得到答案。
  • 哦。我会看到的。感谢您的反馈
  • stackoverflow 应该检查正确的答案,如果它适合你。

标签: opengl


【解决方案1】:

你的问题是:你的多边形和你的相机在同一个坐标。 (多边形不是在相机的前面,它在上面它。)

  1. 当多边形处于初始位置时,它与看不到它的相机完全对齐;
  2. 当它开始旋转时,它的一部分会出现在相机前面,但它太近而无法显示。

但是,在构建透视矩阵时将 fovy 设置为 0° 会产生一个(真正的)广角相机,它能够看到(真正)近距离的物体 - 解释了为什么您可以看到某些东西,“但不是整件事”。

如果您希望能够通过fovy=45 看到“整个事物”,请通过沿 Z 轴应用负平移将多边形远离相机:

void RenderScene()
{
    ...
    glPushMatrix();
    glTranslatef(0.,0.,-10.); // Move away from camera
    glRotatef(rot,0.0,1.0,0.0);
    glBegin(GL_POLYGON);
        ...
    glEnd();
    glPopMatrix();
    ...
}

【讨论】:

  • 嘿,非常感谢你现在我明白了每一件事,它是一个真正的帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
相关资源
最近更新 更多