資源簡介
本代碼是用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轉發工具
評論
共有 條評論