光照
来源:互联网 发布:linux mkdir创建目录 编辑:程序博客网 时间:2024/06/11 18:27
最近没怎么写程序 今天看了光照这个部分写了个光照旋转的正方体。以下是源代码:
#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; }不好意思,一个注释也没有,我很懒,嘿嘿。
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照
- 光照模型
- 光照模型
- 光照模型
- 光照模型
- 第十四周上机任务(数组大折腾)!!!
- 订阅任务的查询条件定义面板的发开感悟
- 关于转屏,onRetainNonConfigurationInstance()与onSaveInstanceState()的比较
- 心态决定成败
- 播放声音
- 光照
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- 数组的排序
- 比较两个图像取文件MD5值
- VC开发支持ActiveX控件工程
- Devexpress xtraGrid 右键菜单位置控制
- 心态决定成败2
- 如何实现线程的开启、暂停和停止
- Wince内存泄露检测工具Application Verifier的使用和如何快速定位泄露语句(二)