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;
}
效果图下:
看看我的程序,中间有个函数不是很明白有大侠可以指点一下,谢谢
#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学习脚印: 光照中材质和lighting maps使用(material and lighting maps)
- opengl学习笔记之光照、材质(转载)
- 【转】opengl学习笔记之光照、材质
- OpenGL学习(五) 光照与材质
- 学习OpenGL(五)颜色、光照与材质
- OpenGL学习: 光照系列2-材质和lighting maps使用
- OpenGL学习笔记(12)基本光照
- OpenGL系统设计-光照与材质(1)
- [OPENGL]纹理,材质,光照
- OpenGL系统设计-光照与材质(2)
- Windows 8 Directx 开发学习笔记(九)材质定义及混合光照效果实现
- OpenGL材质和光照(转)part2
- OpenGL材质和光照(转)part1
- OpenGL入门学习[七] 光照的基本知识
- OpenGL学习入门之3D光照机器人
- OpenGL学习入门之3D光照机器人
- [OPENGL]纹理,材质,光照
- OpenGL系统设计-光照与材质(5)
- OpenGL学习笔记:光照
- OpenGL学习笔记 (7) —— 三种不同的纹理滤波方式,光照和键盘控制