opengl - 在 OpenGL 中使用 gluPerspective

标签 opengl

我正在做我的 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;  
}  

最佳答案

您的问题是:您的多边形和相机位于同一坐标。 (多边形不是在相机前面,而是在相机之上。)

  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();
    ...
}

关于opengl - 在 OpenGL 中使用 gluPerspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1968403/

相关文章:

c++ - 设置每个像素的最快方法

OpenGL 抗锯齿和背景四边形

使用 GLEW、assimp、SDL2 和带有 CodeBlocks 的 CMake 的 C++ OpenGL 项目设置

c++ - 我已经转换了 The Red Book 9ed ex。 3.7 从旧功能到 4.5 功能,但不显示任何内容

c++ - OpenCV OpenGLDrawCallback 没有被调用

python - numpy.float128 在 Windows 中不存在,但从 OpenGL 调用

Java绝对清理

windows - 当线程在 SwapBuffers() 中被阻塞时 GetMessage()

c++ - glColor不会改变opengl中其他三角形的颜色

python - 如何在 OpenGL 和 pygame 中绘制 3D 网格后的 2D 图像?