OpenGL-聚光燈-spot

4.聚光燈

4.1 glLightModelfv()光照模型

GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱環境光,使物體可見
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);

4.2 光源屬性參數

GLfloat light1_position[]={1.0,1.0,5.0,1.0};
GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0}; 
GLfloat light1_specular[]={1.0,1.0,1.0,1.0};
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);

4.3 材質屬性參數

GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.0};
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);    //指定當前材質屬性 鏡面反射顏色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);  //鏡面反射指數

4.4 開啓聚光燈功能

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);

代碼示例:

void init()
{
	GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
	GLfloat mat_shininess[]={128.0};

	GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱環境光,使物體可見
	glClearColor(0.0,0.0,0.0,1.0);
	glShadeModel(GL_SMOOTH);//GL_SMOOTH

	//聚光燈light1
	GLfloat light1_position[]={1.0,1.0,5.0,1.0};
	GLfloat spot_direction[]={0.0,0.0,-1.0};
	GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0}; 
	GLfloat light1_specular[]={1.0,1.0,1.0,1.0}; 
	GLfloat light1_ambient[]={0.2,0.2,0.2,1.0};

	glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
	glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
	glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
	glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);

	glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);    //指定當前材質屬性 鏡面反射顏色
	glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);  //鏡面反射指數

	glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,50.0);//角度
	glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);//方向
	glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,2.0);//*/

	glEnable(GL_LIGHTING);   
	glEnable(GL_LIGHT1);
	glEnable(GL_DEPTH_TEST);  
}

實例圖片:


發佈了10 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章