Glut glutSolidSphere工作不正确

本文关键字:不正确 工作 glutSolidSphere Glut | 更新日期: 2023-09-27 17:50:44

我在使用GLUT绘制一个简单的球体时遇到了一个问题。当我画一个球体时,应用程序只画一个黑色的形式(我的背景色是白色),当我试图画一个电线立方体时,我只得到一个黑点。这是我的代码

private void init()
{
    Glut.glutInit();
    Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
    Gl.glClearColor(255, 255, 255, 1);
    Gl.glViewport(0, 0, AnT.Width, AnT.Height);
    Gl.glMatrixMode(Gl.GL_PROJECTION);
    Gl.glLoadIdentity();
    Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
    Gl.glMatrixMode(Gl.GL_MODELVIEW);
    Gl.glLoadIdentity();
    Gl.glEnable(Gl.GL_DEPTH_TEST);
    Gl.glEnable(Gl.GL_LIGHTING);
    Gl.glEnable(Gl.GL_LIGHT0);
}

private void draw()
{
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
    Gl.glClearColor(255, 255, 255, 1);
    Gl.glLoadIdentity();
    //Glut.glutWireCube(100);
    Glut.glutSolidSphere(1, 16, 16);
    Gl.glPopMatrix();
    Gl.glFlush();
    AnT.Invalidate();
}

我的init函数在加载窗体时被调用,我的draw函数在绘制窗体时被调用。有人能帮我吗?

Glut glutSolidSphere工作不正确

Glut.GLUT_SINGLE | Glut.GLUT_RGB | Glut.GLUT_DOUBLE

GLUT_SINGLEGLUT_DOUBLE互斥。选择一个.

Gl.glPopMatrix();

您缺少相应的glPushMatrix(),尽管对于这个特定的用例,您也不需要。

Gl.glClearColor(255, 255, 255, 1);

glClearColor()在0.0和1.0之间取float s


试试这个序列:

private void init()
{
    Glut.glutInit();
    Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);
    Gl.glViewport(0, 0, AnT.Width, AnT.Height);
}
private void draw()
{
    Gl.glClearColor(1, 1, 1, 1);
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
    Gl.glMatrixMode(Gl.GL_PROJECTION);
    Gl.glLoadIdentity();
    Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
    Gl.glMatrixMode(Gl.GL_MODELVIEW);
    Gl.glLoadIdentity();
    Gl.glTranslatef(0, 0, -5);
    Gl.glEnable(Gl.GL_DEPTH_TEST);
    Gl.glEnable(Gl.GL_CULL_FACE);
    Gl.glEnable(Gl.GL_LIGHTING);
    Gl.glEnable(Gl.GL_LIGHT0);
    Glut.glutSolidSphere(1, 16, 16);
    // Gl.glDisable(Gl.GL_LIGHTING);
    // Glut.glutWireCube(1);
    Gl.glFinish();
    AnT.Invalidate();
}