您的位置:首页 > 运维架构

OpengL学习之光照和材质小窥

2014-09-12 21:55 537 查看
由于学习计算机图形学还没有看到这一章,只是简单的从网上找了点程序修改了一下

看看我的程序,中间有个函数不是很明白有大侠可以指点一下,谢谢

#include <gl/glut.h>
#pragma comment(lib,"glut32.lib")
#define GLUT_DISABLE_ATEXIT_HACK//不知道这个什么意思

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glColor3f(1.0,0.0,0.0);
glutSolidCube(50);

glTranslatef(60,0.0,0.0);
glColor3f(1.0,0.0,0.0);
glutSolidCube(50);

glutSwapBuffers();
}

void spotlight()
{
GLfloat ambientLight[] = {0.2,0.2,0.2,1.0};
GLfloat diffuelight[] = {0.9,0.9,0.9,1.0};
GLfloat specularLight[] = {1.0,1.0,1.0,1.0};
GLfloat lightPos[] = {25.0,25.0,90.0,1.0};//???前三个参数没有搞明白到底什么意思

glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuelight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specularLight);
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);

glEnable(GL_LIGHT0);

glEnable(GL_COLOR_MATERIAL);

glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT,GL_SPECULAR,specularLight);
glMateriali(GL_FRONT,GL_SHININESS,100);
}
void reshape(int w,int h)
{
GLfloat aspect = (GLfloat)w/(GLfloat)h;
GLfloat nRange = 100.0f;

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w<=h)
{
glOrtho(-nRange,nRange,-nRange*aspect,nRange*aspect,-nRange,nRange);
}
else
{
glOrtho(-nRange,nRange,-nRange/aspect,nRange/aspect,-nRange,nRange);
}
}

int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);
glutCreateWindow("hello");

glutReshapeFunc(reshape);
glutDisplayFunc(display);

spotlight();
glutMainLoop();
return 0;
}

效果图下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl 应用 编程