【问题标题】:Sphere is not visible with glutSolidSphere()使用 glutSolidSphere() 看不到球体
【发布时间】:2014-10-02 17:27:07
【问题描述】:

下面是我显示实心球体的代码。我用 ModelMatrix 来显示。但我无法看到固体。是否应该添加投影之类的东西。但我目前不需要预测。

    #include <stdlib.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glut.h>
    #include<windows.h>
    static void Init() {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    }


    static void display() {
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
        glColor3d(1,1,0);
      glutSolidSphere(3,4,4);
    }

    int main(int argc, char** argv) {

      glutInit(&argc,argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
      glutInitWindowSize( 550, 550);
      glutInitWindowPosition( 50, 50);
      glutCreateWindow( "Balloon");

      glutDisplayFunc(display);
      Init();
      glutMainLoop();
      return 0;
    }

【问题讨论】:

  • 我看到了一些可能导致您的问题的事情。首先,在显示函数结束时,您需要调用 glutSwapBuffers()。这会将前缓冲区与后缓冲区(您绘制的缓冲区)交换,以便显示。第二件事是您需要在显示函数的开头调用 glClear 来清除前一帧的内容。此外,如果您的模型视图和投影矩阵都是单位矩阵,那么可显示的坐标将从 -1 到 1,因此很可能您的球体对于您当前的矩阵来说太大了。

标签: opengl glut glu


【解决方案1】:

将模型视图矩阵设置为恒等式本质上是将相机直接放在原点。您的球体同样在原点渲染,因此您的视点位于球体的中心。根据 glut 的渲染方式,这可能会使您的球体不可见,因为您正在查看几何体的背面。

此外,通过不设置投影矩阵,您会隐式使用默认投影,这是一个正交投影,在所有三个维度上都限制在 [-1, 1] 的范围内。由于您的球体半径为 3,因此您的所有几何体都在投影平截头体之外,因此正在被剔除。

尝试使用 gluLookAt 来定位相机及其正在寻找的位置。我建议您使用 gluLookAt 将相机定位在 0,0,1 并查看原点,然后绘制半径为 0.5 的球体。这应该使它可见,因为您不再将球体的表面推到投影平截头体之外,并且您不再在球体内。

【讨论】:

  • 在这种情况下设置 gluLookAt() 会有帮助吗?
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 2019-05-18
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
相关资源
最近更新 更多