【问题标题】:Draw sphere on white background (C++ and OpenGL)在白色背景上绘制球体(C++ 和 OpenGL)
【发布时间】:2014-10-03 14:44:17
【问题描述】:

我正在尝试使用 OpenGL 在白色背景上绘制一个红色球体。这是我的代码中应该绘制球体的部分。

部分主入口点:

initialise();
glutDisplayFunc(draw_Sphere);
glEnable(GL_DEPTH_TEST);
glutMainLoop();

初始化:

void initialise()
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glDepthFunc(GL_LEQUAL);
    glShadeModel(GL_SMOOTH);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

绘制球体:

void draw_Sphere()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(200, 200, 0);
    glColor3f(1.0, 0.0, 0.0);
    glPushMatrix();
    glutSolidSphere(0.25, 20, 20);
    glPopMatrix();
    glutSwapBuffers();
}

我不知道出了什么问题,但这不会渲染球体(不过它会绘制白色背景)。有什么建议可以解决吗?

【问题讨论】:

  • 一些想法:我看到你启用了 GL_LIGHTING 但我没有看到灯光设置。您在 X 和 Y 但不是 Z 中执行 glTranslatef:但我认为您希望 X 和 Y 为零,并且 Z 被平移,因为默认相机沿 Z 轴看。我忘记了 Z 应该是正数还是负数。接下来,无需围绕对 glutSolidSphere 的调用推送/弹出矩阵。使用默认的相机矩阵。我建议从一个正确设置的工作教程开始,然后将您的调用添加到 glutSolidSphere。试试nehe.gamedev.net/tutorial/lessons_01__05/22004

标签: c++ opengl geometry draw


【解决方案1】:

使用矩阵

考虑为此设置适当的模型、视图和投影矩阵。这样您就可以更好地控制所看到的内容。

解决方案

删除glTranslatef(200, 200, 0); 行,这样您就可以将球体从截锥体中取出。你应该看到球体。

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多