光照

最近没怎么写程序 今天看了光照这个部分写了个光照旋转的正方体。以下是源代码:

#include <gl/glut.h>
const GLfloat redLightColor[]={1.0,0.0,0.0,1.0};
const GLfloat redLightPos[]={2.0,2.0,10.0,1.0};

const GLfloat greenLightColor[]={0.1,0.6,0.2,1.0};
const GLfloat greenLightPos[]={0.0,0.0,10.0,1.0};
float angle;
void DrawCube()
{   	
	glBegin(GL_QUADS);
	glColor3f(0.0f,0.0f,1.0f);
							
	glVertex3f( 5.0f, 5.0f,-5.0f);					
	glVertex3f(-5.0f, 5.0f,-5.0f);					
	glVertex3f(-5.0f, 5.0f, 5.0f);				
	glVertex3f( 5.0f, 5.0f, 5.0f);				
							
	glVertex3f( 5.0f,-5.0f, 5.0f);					
	glVertex3f(-5.0f,-5.0f, 5.0f);					
	glVertex3f(-5.0f,-5.0f,-5.0f);					
	glVertex3f( 5.0f,-5.0f,-5.0f);					
							
	glVertex3f( 5.0f, 5.0f, 5.0f);					
	glVertex3f(-5.0f, 5.0f, 5.0f);					
	glVertex3f(-5.0f,-5.0f, 5.0f);					
	glVertex3f( 5.0f,-5.0f, 5.0f);					
							
	glVertex3f( 5.0f,-5.0f,-5.0f);					
	glVertex3f(-5.0f,-5.0f,-5.0f);					
	glVertex3f(-5.0f, 5.0f,-5.0f);					
	glVertex3f( 5.0f, 5.0f,-5.0f);					
						
	glVertex3f(-5.0f, 5.0f, 5.0f);					
	glVertex3f(-5.0f, 5.0f,-5.0f);					
	glVertex3f(-5.0f,-5.0f,-5.0f);					
	glVertex3f(-5.0f,-5.0f, 5.0f);					
							
	glVertex3f( 5.0f, 5.0f,-5.0f);					
	glVertex3f( 5.0f, 5.0f, 5.0f);					
	glVertex3f( 5.0f,-5.0f, 5.0f);					
	glVertex3f( 5.0f,-5.0f,-5.0f);						
	glEnd();						
	
}
void Init()
{
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_LIGHTING);

	glEnable(GL_LIGHT0);
	
	glLightfv(GL_LIGHT0,GL_AMBIENT,redLightColor);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,redLightColor);
	glLightfv(GL_LIGHT0,GL_SPECULAR,redLightColor);

	glEnable(GL_LIGHT1);
	glLightfv(GL_LIGHT1,GL_AMBIENT,greenLightColor);
	glLightfv(GL_LIGHT1,GL_DIFFUSE,greenLightColor);
	glLightfv(GL_LIGHT1,GL_SPECULAR,greenLightColor);
    
	
}
 void reshape(int width,int height)
 {
	 if(height==0)
	 {
		 height=1;
	 }
	 glViewport(0,0,width,height);
	 glMatrixMode(GL_PROJECTION);
	 glLoadIdentity();
	 gluPerspective(45.0,width/height,1.0,1000.0);
	 glMatrixMode(GL_MODELVIEW);
	 glLoadIdentity();
 }
 void display()
 {
	 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
	 glLoadIdentity();
	 gluLookAt(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
	 
	 
	 glPushMatrix();
	 glRotatef(angle,1.0,0.0,0.0);
	// glutWireCube(9.0);
	 DrawCube();
	 glPopMatrix();


	

	 glPushMatrix();
	 glDisable(GL_LIGHTING);
	 //glRotatef(angle,1.0,0.0,0.0);
	 //glRotatef(angle,0.0,1.0,0.0);
	 glLightfv(GL_LIGHT0,GL_POSITION,redLightPos);
	 glTranslatef(redLightPos[0],redLightPos[1],redLightPos[2]);
	 glColor3fv(redLightColor);
	 glutSolidSphere(0.5,10,8);
	 glEnable(GL_LIGHTING);
	 glPopMatrix();

	 glPushMatrix();
	 glDisable(GL_LIGHTING);
	 glRotatef(angle,1.0,0.0,0.0);
	 glRotatef(angle,0.0,1.0,0.0);
	 glLightfv(GL_LIGHT2,GL_POSITION,greenLightPos);
	 glTranslatef(greenLightPos[0],greenLightPos[1],greenLightPos[2]);
	 glColor3fv(greenLightColor);
	 glutSolidSphere(0.5,10,8);
	 glEnable(GL_LIGHTING);
	 glPopMatrix();

	 GLfloat cubeColor[]={0.6,0.7,1.0,1.0};
	 GLfloat cubeSpecular[]={1.0,1.0,1.0,1.0};
	 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cubeColor);
	 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, cubeSpecular);
	 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 128.0f);
 
     
	 glFlush();
	 glutSwapBuffers();
 }
 void Idle()
 {
	 angle+=2.0;
	 display();
 }
 int main(int argc,char **argv)
 {
	 glutInit(&argc,argv);
	 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	 glutInitWindowSize(500,500);
	 glutInitWindowPosition(100,100);
	 glutCreateWindow(argv[0]);
	 Init();
	 glutDisplayFunc(display);
	 glutIdleFunc(Idle);
	 glutReshapeFunc(reshape);
	 glutMainLoop();
	 return 0;

 }
不好意思,一个注释也没有,我很懒,嘿嘿。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值