// глобально
GLfloat light_Ka[]={.1, .1, .1, 1};
GLfloat light_Kd[]={.3, .3, .3, 1};
GLfloat light_Ks[]={.1, .1, .1, 1};
GLfloat light_model_Ka[]={.2, .2, .2, 1};
GLfloat pos_light[4]={10,4,10,1},
dir_light[4]={0,-1,0,1};
GLfloat material_Ka[]={.5, .5, .5, 1};
GLfloat material_Kd[]={.4, .6, .8, 1};
GLfloat material_Ks[]={.5, .5, .5, 1};
GLfloat material_Ke[]={0, 0, 0, 1};
GLfloat material_Se=10;
GLuint list_cubes;
// в Init()
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);
int i=3;
glEnable(GL_LIGHT0+i);
glLightfv(GL_LIGHT0+i,GL_AMBIENT,light_Ka);
glLightfv(GL_LIGHT0+i,GL_DIFFUSE,light_Kd);
glLightfv(GL_LIGHT0+i,GL_SPECULAR,light_Ks);
glLightf(GL_LIGHT0+i,GL_SPOT_CUTOFF,60);
glLightf(GL_LIGHT0+i,GL_SPOT_EXPONENT,100);
glLightfv(GL_LIGHT0+i,GL_POSITION,pos_light);
glLightfv(GL_LIGHT0+i,GL_SPOT_DIRECTION,dir_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,light_model_Ka);
glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,1);
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,1);
glMaterialfv(GL_FRONT,GL_AMBIENT,material_Ka);
glMaterialfv(GL_FRONT,GL_DIFFUSE,material_Kd);
glMaterialfv(GL_FRONT,GL_SPECULAR,material_Ks);
glMaterialfv(GL_FRONT,GL_EMISSION,material_Ke);
glMaterialf(GL_FRONT,GL_SHININESS,material_Se);
// создаем кучу кубиков
list_cubes=glGenLists(1);
glNewList(list_cubes, GL_COMPILE);
for(int y=0;y<200;y++){
for(int x=0;x<200;x++){
glutSolidCube(.1);
glTranslatef(1,0,0);
}
glTranslatef(-200,0,0);
glTranslatef(0,0,1);
}
glEndList();
// в Display() рисуем
glPushMatrix();
glTranslatef(-100,0,0);
glTranslatef(0,0,-100);
glTranslatef(0,1,0);
glCallList(list_cubes);
glPopMatrix();
[OpenGL] Конусный источник света
Пытаясь разобраться с источниками света сделал утрированную сцену: куча кубиков и источник света (над плоскостью кубиков):
Код:
Нужен конусный источник света.
Хочу увидеть, что несколько кубиков освещены, а остальные освещены еле-еле. т.е. хочу увидеть пятно света. Кубики насоздавал, чтоб быть уверенным что все нормали и пр. там где надо.
Помогите исправить.
В приложении есть полный файл light.cpp его нужно добавить в пустой консольный проект студии. Написан с использование glut.
Спасибо.
Если есть возможность использовать шейдеры, то реализация очень проста. В противном случае все тоже не очень сложно, но прийдется помучаться с генерацией текстурных координат.
Цитата:
Нужен конусный источник света.
Хочу увидеть, что несколько кубиков освещены, а остальные освещены еле-еле. т.е. хочу увидеть пятно света. Кубики насоздавал, чтоб быть уверенным что все нормали и пр. там где надо.
Хочу увидеть, что несколько кубиков освещены, а остальные освещены еле-еле. т.е. хочу увидеть пятно света. Кубики насоздавал, чтоб быть уверенным что все нормали и пр. там где надо.
Есть второй вариант. Сцену нарисовать в 3DMax-е вместе с конусным источником света. Потом сгенерировать LightMap-ы и экспортировать сцену в какой-нибудь 3DS. Потом загрузить этот файл. И можно обойтиь без шейдеров.