資源簡介
利用Opengl實現日地月模型,理解OpenGL中的變換過程,理解透視投影與平行投影的不同 ,了解深度測試,通過變換調整觀察的位置與方向 ,加入光照模型
代碼片段和文件信息
////////////////////////////////////////////////////////////////////////////
//實驗要求:(1)理解OpenGL中的變換過程?????????????????????????????????????//
//??????????(2)理解透視投影與平行投影的不同???????????????????????????????//?
//??????????(3)添加代碼實現太陽、地球和月亮的運動模型?????????????????????//
//??????????(4)了解深度測試???????????????????????????????????????????????//
//??????????(5)通過變換調整觀察的位置與方向???????????????????????????????//
//??????????(6)加入光照模型???????????????????????????????????????????????//
////////////////////////////////////////////////////////////////////////////
#include?
#include?
#include?
#include?
#include?
static?GLfloat?xRot?=?0.0f;
static?GLfloat?zRot?=?0.0f;
static?GLfloat?xTra?=?0.0f;
static?GLfloat?yTra?=?0.0f;
static?GLfloat?zTra?=?0.0f;
void?Initial()
{
glEnable(GL_DEPTH_TEST); //?啟用深度測試
glFrontFace(GL_CCW);//?指定逆時針繞法表示多邊形正面
//設置光源的參數
GLfloat?light0_diffuse[]={1.0f1.0f1.0f1.0f};
GLfloat?light1_diffuse[]={0.0f1.0f1.0f1.0f};
GLfloat?light0_ambient[]={0.0f0.5f0.5f1.0f};
GLfloat?light1_ambient[]={1.0f0.66f0.0f1.0f};
glLightfv(GL_LIGHT0GL_DIFFUSElight0_diffuse);
glLightfv(GL_LIGHT0GL_AMBIENTlight0_ambient);
glLightfv(GL_LIGHT1GL_AMBIENTlight1_ambient);
glLightfv(GL_LIGHT1GL_DIFFUSElight1_diffuse);
//使光源有效
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glClearColor(0.0f?0.0f?0.0f?1.0f?); //背景為黑色
}
void?ChangeSize(int?w?int?h)
{
if(h?==?0) h?=?1;
//?設置視區尺寸
????glViewport(0?0?w?h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//?設置修剪空間
GLfloat?fAspect;
fAspect?=?(float)w/(float)h;
gluPerspective(60.0?fAspect?1.0?500.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void?RenderScene(void)
{
//?太陽旋轉的角度
static?float?fElect1?=?0.0f;
//繞太陽旋轉的角度
static?float?fElect2?=?0.0f;
//繞地球旋轉的角度
static?float?fElect3?=?0.0f;
//雙緩存和深度測試
glClear(GL_COLOR_BUFFER_BIT?|?GL_DEPTH_BUFFER_BIT);
//設置光照
GLfloat?light0_position[]?=?{?0.0f?0.0f?0.0f?1.0f?};
GLfloat?light1_position[]?=?{?0.0f?0.0f?1.0f?0.0f?};
glLightfv?(GL_LIGHT0?GL_POSITION?light0_position);
glLightfv?(GL_LIGHT1?GL_POSITION?light1_position);
//?重置模型視圖矩陣
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//將圖形沿z軸負向移動
glTranslatef(0.0f?0.0f?-250.0f);
- 上一篇:計算機圖形學消隱實驗轉
- 下一篇:rs編碼c語言實現
評論
共有 條評論