资源简介
本代码是用OPENGL实现光线跟踪算法,从影响光照效果的因素着手,主要演示了静态多光源,材料属性,动态多光源三个方面。
代码片段和文件信息
#include
#include
#include
#include
//静态多光源部分
void init(void)
{
glShadeModel (GL_SMOOTH);
glClearColor (0.2 0.2 0.2 1.0);
//材料属性值设置
GLfloat mat_specular[] = { 1.0 1.0 1.0 1.0 };
GLfloat mat_shininess[] = { 50.0 };
//glMaterialfv的调用
glMaterialfv(GL_FRONT GL_SPECULAR mat_specular);
glMaterialfv(GL_FRONT GL_SHININESS mat_shininess);
//环境光,散射光和镜面光参数
GLfloat light_ambient[] = { 0.0 0.0 1.0 1.0 };
GLfloat light_diffuse[] = { 1.0 1.0 1.0 1.0 };
GLfloat light_specular[] = { 1.0 1.0 1.0 1.0 };
GLfloat light_position[] = { 1.0 1.0 1.0 0.0 };
GLfloat light1_ambient[] = { 1.0 0.0 0.0 1.0 };
GLfloat light1_diffuse[] = { 1.0 0.0 0.0 1.0 };
GLfloat light1_specular[] = { 1.0 1.0 1.0 1.0 };
GLfloat light1_position[] = { 0.0 2.0 2.0 1.0 };
//衰减因子
glLightf(GL_LIGHT0 GL_CONSTANT_ATTENUATION 2.0);
glLightf(GL_LIGHT0 GL_LINEAR_ATTENUATION 1.0);
glLightf(GL_LIGHT0 GL_QUADRATIC_ATTENUATION 0.5);
glLightf(GL_LIGHT1 GL_CONSTANT_ATTENUATION 1.5);
glLightf(GL_LIGHT1 GL_LINEAR_ATTENUATION 0.5);
glLightf(GL_LIGHT1 GL_QUADRATIC_ATTENUATION 0.2);
//LIGHT1聚光灯参数
GLfloat spot_direction[] = { 1.0 -1.0 -1.0 };
glLightf(GL_LIGHT1 GL_SPOT_CUTOFF 45.0);
//glLightfv的调用
glLightfv(GL_LIGHT0 GL_AMBIENT light_ambient);
glLightfv(GL_LIGHT0 GL_DIFFUSE light_diffuse);
glLightfv(GL_LIGHT0 GL_SPECULAR light_specular);
glLightfv(GL_LIGHT0 GL_POSITION light_position);
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);
glLightfv(GL_LIGHT1 GL_SPOT_DIRECTION spot_direction);
glLightf(GL_LIGHT1 GL_SPOT_EXPONENT 5.0);
//观察点设置
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER GL_FALSE);
//glEnable的调用
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere (1.0 20 16);
glFlush ();
}
//材料部分
void init2(void)
{
glShadeModel (GL_SMOOTH);
glClearColor (0.2 0.2 0.2 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//环境光,散射光和镜面光参数
GLfloat light_ambient[] = { 0.0 0.0 1.0 1.0 };
GLfloat light_diffuse[] = { 1.0 1.0 1.0 1.0 };
GLfloat light_specular[] = { 1.0 1.0 1.0 1.0 };
GLfloat light_position[] = { 1.0 1.0 1.0 0.0 };
//glLightfv的调用
glLightfv(GL_LIGHT0 GL_AMBIENT light_ambient);
glLightfv(GL_LIGHT0 GL_DIFFUSE light_diffuse);
glLightfv(GL_LIGHT0 GL_SPECULAR light_specular);
glLightfv(GL_LIGHT0 GL_POSITION light_position);
//观察点设置
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER GL_FALS
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8130 2008-12-23 12:04 用OPENGL实现光线跟踪算法\光线跟踪.cpp
文件 1208832 2009-03-25 17:52 用OPENGL实现光线跟踪算法\光线跟踪算法.ppt
文件 242688 2008-12-23 11:59 用OPENGL实现光线跟踪算法\图形学实验说明及效果展示.doc
目录 0 2009-03-25 17:52 用OPENGL实现光线跟踪算法
----------- --------- ---------- ----- ----
1459650 4
- 上一篇:box2d的lua导出LuaBox2D
- 下一篇:UDP/TCP转发工具
评论
共有 条评论