• 大小: 809KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签:

资源简介

本代码是用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


评论

共有 条评论

相关资源