資源簡介
功能說明:
(1)繪制球體線框模型的透視投影圖,使用背面剔除算法實現動態消隱;
(2)通過右鍵菜單顯示消隱效果,右鍵菜單有兩個選項:未消隱與消隱;
(3)使用鍵盤的上下左右控制鍵旋轉消隱前后的球體;
(4)單擊左鍵增加視距,右擊縮短視距;

代碼片段和文件信息
#include?
#include?
#define?NO_XIAOYIN?1
#define?XIAOYIN?2
static?float?a=1.0fb=0.0fc=0.0f;
GLfloat???rtrir=1.0f;//旋轉角度
bool?bXiaoyin?=?true;
void?init(void)?
{
???????glClearColor(0.0f?0.0f?0.0f?0.0f);//背景色
???????glShadeModel(GL_SMOOTH);//設為smooth處理方式
???????glEnable(GL_DEPTH_TEST);//激活深度測試
}
?
void?display(void)
{
???????glClear(GL_COLOR_BUFFER_BIT?|?GL_DEPTH_BUFFER_BIT);????//清除顏色緩存和深度緩存
???????glLoadIdentity();
???????glTranslatef(-1.0f0.0f-4.0f);//控制球的位置和大小
???????glRotatef(rtriabc);//旋轉
???glColor3f(0.0f1.0f0.0f);//控制球的顏色
???if(bXiaoyin)
??????????glutWireSphere(r4530?)?;?//初始化線框球?球體圍繞z軸分割45次球體沿著z軸分割30次
???????else
???{
glDisable(GL_TEXTURE_2D);
????glColorMask(0000);
????glEnable(GL_DEPTH_TEST);
????glDepthFunc(GL_LESS);
????glPolygonMode(GL_FRONT_AND_BACK?GL_FILL);
????glPolygonOffset(1.1f?4.0f);
????glEnable?(GL_POLYGON_OFFSET_FILL);??
????//auxSolidSphere(1.0);
????glutSolidSphere??(r?45?30??)?;//實心球
????glDisable?(GL_POLYGON_OFFSET_FILL);
????glColorMask(1?1?1?1);
????glPolygonMode?(GL_FRONT_AND_BACK?GL_LINE);
??
????//auxSolidSphere(1.0);
???glutSolidSphere??(r4530)?;???
???}
???????
???????glutSwapBuffers();//交換雙緩存
}
?
?
void?reshape?(int?width?int?height)//對屏幕窗口的形狀進行調整
{
???????glViewport(0?0?width?height);?
???????glMatrixMode(GL_PROJECTION);
???????glLoadIdentity();
???????gluPerspective(45.0f?(GLfloat)width/(GLfloat)height?0.1f?100.0f);
???????glMatrixMode(GL_MODELVIEW);
???????glLoadIdentity();
}
void?processMenuEvents(int?option)//此函數處理根據菜單選項來執行的動作
{
switch?(option)?{
case?1:
bXiaoyin?=?true;
glutPostRedisplay();
break;
case?2:
bXiaoyin?=?false;
glutPostRedisplay();
break;
????default:
????????break;
}
}
void?createGLUTMenus()//創建菜單
{
int?menu;
menu?=?glutCreateMenu(processMenuEvents);
glutAddMenuEntry(“消隱“XIAOYIN);//在菜單中添加選項
glutAddMenuEntry(“未消隱“NO_XIAOYIN);
glutAttachMenu(GLUT_RIGHT_BUTTON);
}
?
void?keyboard(unsigned?char?key?int?x?int?y)??//鍵盤控制球體的縮放
{
???????switch?(key)
???????{
??case?‘o‘:
?????r+=0.1f;
?????????????????????glutPostRedisplay();
?????????????????????break;
??case?‘i‘:
?????r-=0.1f;
?????????????????????glutPostRedisplay();
?????????????????????break;
??????????case?‘x‘:
?????????????????????exit(0);
?????????????????????break;
??????????????default:
?????????????????????break;
???}
}
void?keyboard1(int?keyint?xint?y)
{
????switch(key)
{
????case?GLUT_KEY_LEFT://向左旋轉
a=0.0f;
b=1.0f;
c=0.0f;
????????????rtri-=2.0f;//減一個角度
????????????glutPostRedisplay();//重畫
????????????break;
case?GLUT_KEY_RIGHT://向右旋轉
a=0.0f;
b=1.0f;
c=0.0f;
????????????rtri+=2.0f;//加一個角度
????????????glutPostRedisplay();//重畫
????????????break;
case?GLUT_KEY_UP://向上旋轉
a=1.0f;
b=0.0f;
c=0.0f;
????????????rtri-=2.0f;
????????????glutPostRedisplay();
??????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????169984??1998-08-18?16:25??J07-01-03-王攀\GLUT\glut.dll
?????文件??????21440??1998-08-18?16:24??J07-01-03-王攀\GLUT\glut.h
?????文件??????79654??1998-08-18?16:25??J07-01-03-王攀\GLUT\glut.lib
?????文件?????169984??1998-08-18?16:25??J07-01-03-王攀\GLUT\glut32.dll
?????文件??????79898??1998-08-18?16:25??J07-01-03-王攀\GLUT\glut32.lib
?????文件??????99328??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\vc60.idb
?????文件??????53248??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\vc60.pdb
?????文件?????245056??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\球體消隱.ilk
?????文件?????188530??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\球體消隱.exe
?????文件?????459776??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\球體消隱.pdb
?????文件??????24922??2010-06-25?16:58??J07-01-03-王攀\球體背面消隱\Debug\0.obj
?????文件?????332160??2010-06-27?22:17??J07-01-03-王攀\球體背面消隱\Debug\球體消隱.pch
?????文件??????12799??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\Debug\球體消隱.obj
?????文件??????50176??2010-06-30?12:40??J07-01-03-王攀\球體背面消隱\球體消隱.ncb
?????文件????????756??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\球體消隱.plg
?????文件????????345??2010-06-25?16:52??J07-01-03-王攀\球體背面消隱\球體消隱.sln
????..A..H.??????6656??2010-06-25?16:52??J07-01-03-王攀\球體背面消隱\球體消隱.suo
?????文件???????3427??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\球體消隱.dsp
?????文件???????4429??2010-06-30?12:25??J07-01-03-王攀\球體背面消隱\球體消隱.cpp
?????文件??????48640??2010-06-30?12:40??J07-01-03-王攀\球體背面消隱\球體消隱.opt
?????文件????????524??2010-06-30?12:40??J07-01-03-王攀\球體背面消隱\球體消隱.dsw
?????文件?????259584??2011-04-18?22:08??J07-01-03-王攀\球體消隱課程設計報告.doc
?????目錄??????????0??2010-06-27?00:41??J07-01-03-王攀\球體背面消隱\Debug
?????目錄??????????0??2010-06-27?00:41??J07-01-03-王攀\GLUT
?????目錄??????????0??2010-06-27?00:41??J07-01-03-王攀\球體背面消隱
?????目錄??????????0??2010-06-27?00:41??J07-01-03-王攀
-----------?---------??----------?-----??----
??????????????2311316????????????????????26
評論
共有 條評論