Название: Свет и тени в OpenGL
Отправлено: ru от Январь 14, 2008, 18:28
есть объект, его освещает один направленный источник. вроде все рисуется нормально, но так как объект (у меня прорисовывается спутник) не попадает полностью на экран - то мы его уменьшаем : при повторной прорисовке объект уменьшается дальше и дальше. в чем фигня - почему то чем меньше спутник - тем светлее он становится и очень быстро перестает быть 3-х мерным, а становится 2-мерным белым пятном. вот код проги: void init(void) { GLfloat mat_specular[]={0.1,0.1,0.1,1.0}; GLfloat mat_shininess[]={50.0}; GLfloat light_position[]={1.0,1.0,1.0,0.0}; GLfloat white_light[]={0.5,0.5,0.5,0.5}; // GLfloat white_light1[]={0.0,0.0,0.0,.1}; GLfloat lmodel_ambient[]={0.5,0.0,0.0,1.0}; GLfloat mat_amb_diff[]={0.9,0.9,0.9,1.0};
// glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_SMOOTH); // glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); // glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light); glLightfv(GL_LIGHT0,GL_SPECULAR,white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
// glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION, 0.0); // glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION, 5.0); // glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION, 2.0);
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { OBJModel* satellite_model_ = 0; if ( satellite_model_ == 0 ) { satellite_model_ = new OBJModel; std::ifstream ifs( "satellite.obj" ); std::string str; ifs >> str; satellite_model_->load_model( ifs ); ifs.close(); } glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glScaled(0.5,0.5,0.5); satellite_model_->render(); // glutSolidSphere(1.0,40,16); glFlush(); } спутник задается файлом satellite.obj void reshape(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w<=h) glOrtho(-1.5,1.5,-0.5*(GLfloat)h/(GLfloat)w,0.5*(GLfloat)h/(GLfloat)w,-10.0,10.0); else glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
скажите, где я дурак? позицию источника пытался изменить до умопомрачения, делал его позицыонным и с разными коэф. ослабления интенсивности света... но осветление все равно происходит
Название: Re: Свет и тени в OpenGL
Отправлено: Sergeich от Январь 14, 2008, 21:15
Попробуй
glPushMatrix(); glScaled(0.5,0.5,0.5); satellite_model_->render(); glPopMatrix();
И причем здесь qt?
Название: Re: Свет и тени в OpenGL
Отправлено: ru от Январь 15, 2008, 15:00
сорри, QT не при чем)
ошибся разделом)
Название: Re: Свет и тени в OpenGL
Отправлено: ru от Январь 16, 2008, 17:19
Попробуй
glPushMatrix(); glScaled(0.5,0.5,0.5); satellite_model_->render(); glPopMatrix();
жаль саму проблему это не снимает... только сохраняет проэкцию если уменьшим изображение - glScaled(0.1,0.1,0.1); то оно стем же успехом осветляется превращаясь в двумерную фигню
|