Проблема со светом и глубиной в OpenGL - PullRequest
0 голосов
/ 25 марта 2009
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);

ifstream myFile("Coordinates.txt");

if (!myFile.is_open())
{
    cout << "Unable to open file";
    exit(1); // terminate with error
}

// Light values and coordinates
float ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f };
float diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f };
float specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
float lightPos[] = { 0.0f, -150.0f, -150.0f, 1.0f };

glEnable(GL_CULL_FACE);  // Do not calculate inside of jet
glFrontFace(GL_CCW);     // Co unter clock-wise polygons face

// Enable lighting
glEnable(GL_LIGHTING);
// Setup and enable light 0
glLightfv(GL_LIGHT0,GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glEnable(GL_LIGHT0);

// Light values and coordinates

float specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };

// Enable color tracking
glEnable(GL_COLOR_MATERIAL);
// Set Material properties to follow glColor values
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// All materials hereafter have full specular reflectivity
// with a high shine 
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,specref);
glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,128);


while (! myFile.eof()) 
{
    glPushMatrix();
    myFile>>plot[0];
    myFile>>plot[1];
    myFile>>plot[2];
    myFile>>plot[3];  //this data will not be used

    glColor3f(0.60f/1.5,0.80f/1.5,0.90f/1.5);

    glTranslatef((plot[0]-1.15)*26, (plot[2]-0.51)*45, (plot[1]-1)*30);
    glutSolidSphere(2, 12, 12);
    glLoadIdentity();
    glPopMatrix();

    axes += 0.00005f;

}

glRotatef(axes, 0.0f, 1.0f, 0.0f);      

myFile.close();
glFlush();
glutSwapBuffers();

Я впервые играю с освещением.

Моя проблема в том, что после того, как я помещаю весь код светового эффекта из учебника, кажется, что объекты существуют только в одной плоскости, которая является плоскостью xy, хотя мои данные скоординированы по всем xyz, и отражение кажется немного не таким ...

Может кто-нибудь сказать мне, почему и как это исправить?

Ответы [ 2 ]

1 голос
/ 25 марта 2009

Вы не предоставили достаточно информации. Какие значения в вашем файле? Почему вы загружаете участок [3], когда он не используется? Вы имеете в виду, что glutSphere рендерится как плоский 2-мерный объект в плоскости xy?

Я бы порекомендовал вам ознакомиться с основными функциями OpenGL перед использованием встроенного освещения, эта проблема, вероятно, не имеет ничего общего с освещением. Я также не рекомендовал бы использовать встроенное освещение GL для каких-либо других целей, кроме тестирования и небольших проектов, в любом случае ... оно не очень гибкое и имеет множество ограничений.

1 голос
/ 25 марта 2009
...