【问题标题】:glutSolidSphere isn't being litglutSolidSphere 未点亮
【发布时间】:2013-11-24 00:26:55
【问题描述】:

当我使用此代码示例时,我得到一个扁平的白色球体。

我期待一个从侧面发光并旋转的球体。

#include <GL/glut.h>
#include <GL/freeglut.h>

int angle = 0;
int _refreshmilliseconds = (1 / 60) * 1000; // 60 frames a second

void timer(int value) {
        glutPostRedisplay();
        glutTimerFunc(_refreshmilliseconds, timer, 0);
}

void display(void) {
        /*
        OPEN GL AND GRAPHICS FUNCTIONALITY
        */
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        // Lighting
        // Ambient light
        GLfloat ambientCol[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientCol);

        // Positioned light
        GLfloat lightCol0[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        GLfloat lightPos0[] = { 0.5f, 0.0f, 1.0f, 1.0f };

        glLightfv(GL_LIGHT0, GL_DIFFUSE, lightCol0);
        glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);

        // Keyboard-controlled circle, player1
        glPushMatrix();
        glRotatef(angle, 1.0f, 1.0f, 0.0f);
        glutSolidSphere(0.5f, 20, 20);
        glPopMatrix();

        angle += 2;
    if (angle >= 360) { angle = 0; }

        glutSwapBuffers();
}

int main(int argc, char** argv) {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

        glEnable(GL_DEPTH_TEST);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_NORMALIZE);

        glutInitWindowSize(400, 400);                                           // Set window size
        glutInitWindowPosition(100, 100);                                       // Set window position
        glutCreateWindow("Embera 2.0.1");                                       // Create GLUT window

        glutDisplayFunc(display);
        glutTimerFunc(0, timer, 0);

        glutMainLoop();

        return 0;
}

为什么会这样?

【问题讨论】:

    标签: c++ opengl freeglut


    【解决方案1】:

    问题是我的窗口创建的位置。我的glEnable 电话都没有启动,因为它们是在我创建窗口之前放置的。为了解决这个问题,我只是移动了这一行:

    glutCreateWindow("Embera 2.0.1");

    所以主函数看起来像这样:

    int main(int argc, char** argv) {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
        glutCreateWindow("Embera 2.0.1");
    
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_NORMALIZE);
    
        glutInitWindowSize(400, 400);
        glutInitWindowPosition(100, 100);
    
    
        glutDisplayFunc(display);
        glutTimerFunc(0, timer, 0);
    
        glutMainLoop();
    
        return 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2017-05-12
      • 2021-08-04
      • 2012-09-24
      • 2021-10-22
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多