2014-10-02 74 views
0

下面是我的代码显示实心球。我用ModelMatrix来显示。但我无法看到坚实的。应该添加投影之类的东西。但我目前不需要预测。球不与glutSolidSphere可见()

#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; 
    } 
+0

我看,可能会导致您的问题几件事情。首先在显示函数结束时,您需要调用glutSwapBuffers()。这会将前台缓冲区与后台缓冲区(您绘制的缓冲区)交换,以便显示它。第二件事是你需要在显示函数的开头调用glClear清除前一帧的内容。同样,如果你的模型视图和投影矩阵都是单位矩阵,那么可显示的坐标将从-1到1,所以很可能你的球体对于你当前的矩阵太大了。 – user3256930 2014-10-02 17:48:32

回答

2

将模型视图矩阵设置为标识基本上将相机直接放在原点。你的球体同样被渲染在原点,所以你的视点位于球体的中心。根据渲染的过剩情况,这可能会使您的球体不可见,因为您正在查看几何体的背面。

另外,通过您隐含使用默认投影,这是真实限定为[-1,1]在所有三个维度的范围的正交投影不设定的投影矩阵。由于球体的半径为3,因此所有的几何体都在投影平截头体之外,所以它被淘汰。

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

+0

在这种情况下会设置gluLookAt()帮助吗? – Sam 2014-10-02 18:21:39

+0

更新了我的答案。 – Jherico 2014-10-02 21:09:48

+0

谢谢。那工作。 – Sam 2014-10-03 08:07:17