Я делаю основную игру в openGL с GLUT, и я наткнулся на небольшую заминку.
Когда я пытаюсь нарисовать объект из класса в своем мире, он дает всему оттенок цвета, который был в последний раз создан с помощью функции makeMaterial (см. Ниже).
Кто-нибудь знает, как я могу ограничить применение этих изменений только к объекту?
Я пробовал push / pop, но, похоже, это ничего не ограничивает.
Кроме того, если последний нарисованный цвет - черный, я вообще ничего не вижу, кроме моего снеговика.
Вот соответствующий код:
makeMaterial: -
makeMaterial( float r,float g,float b,float a,float s )
{
float color[4];
float white[4];
GLfloat surfshine[1] ;
surfshine[0]=s*128.0 ;
color[0]=r;color[1]=g;color[2]=b;color[3]=a;
white[0]=0.5;white[1]=0.5;white[2]=0.5;white[3]=1.0;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,color);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE,color);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,white);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS,surfshine);
}
makeMaterial используется: -
makeMaterial(0.05f,0.05f,0.05f,1.00f, 0.4f);
glPushMatrix();
glutSolidCube(10.0);
glPopMatrix();
моя функция рисования: -
void drawToScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
uniformFPS.setStartTime(glutGet(GLUT_ELAPSED_TIME));
camera.updateCamera();
lvl1.drawLevel();
enemy.drawSnowman(350.0f,6.0f, 200.0f);
crosshair.show();
glutSwapBuffers();
uniformFPS.enforceChecks();
}