【问题标题】:Glut glutSolidSphere works incorrectlyGlut glutSolidSphere 工作不正确
【发布时间】:2013-01-05 19:00:11
【问题描述】:

我在使用 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 函数在加载表单和我的绘图函数时被调用 - 在绘制它时。谁能帮帮我?

【问题讨论】:

  • 查看这个 stackoverflow 帖子,看看 cmets / 答案是否可以帮助解决您的问题 - stackoverflow.com/questions/11292733/…
  • @DJKRAZE,不幸的是我不明白这个话题,因为我刚刚开始使用 openGL。

标签: c# opengl glut


【解决方案1】:
Glut.GLUT_SINGLE | Glut.GLUT_RGB | Glut.GLUT_DOUBLE

GLUT_SINGLEGLUT_DOUBLE 是互斥的。选择一个。

Gl.glPopMatrix();

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

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

glClearColor()floats 取值在 0.0 和 1.0 之间。


试试这个顺序:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2017-06-10
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多