计算机图形学 实验二 OpenGL简单动画
一、 實驗目的
二、 實驗環(huán)境
操作系統(tǒng):Windows 10 1909版本 64位 語言開發(fā)環(huán)境:Microsoft Visual Studio 2017 程序框架:Win32 桌面應用程序。三、 實驗要求與內(nèi)容
實驗步驟:
閑置函數(shù)的使用與簡單動畫
觀察到六邊形按照程序視窗中心點逆時針旋轉(zhuǎn),要更改旋轉(zhuǎn)速度,可通過更改myidle()閑置函數(shù)的屬性值theta大小實現(xiàn)。
2) 添加多邊形模式設(shè)置與線寬設(shè)置觀看效果
觀察到旋轉(zhuǎn)的多邊形變成空心線框模式。
回到多邊形填充模式修改代碼:
觀察到“Hello”字符串在設(shè)定的坐標點定位顯示
設(shè)置全局變量 int k = 0;
在myidle函數(shù)添加代碼
效果如圖:觀察到六邊形靜止,直線單獨旋轉(zhuǎn)
思考:要使直線保持與及其時鐘秒針拍溫和,可在myidle函數(shù)中設(shè)置Sleep(1000)延時一秒,并設(shè)置theta=+= 6*PI/180; 使得每秒轉(zhuǎn)過6°,一分鐘轉(zhuǎn)一周。
}
觀察到時間函數(shù)的作用效果,即每隔1000ms變換一次圖形,使直線旋轉(zhuǎn)theta度。
3.簡單時鐘設(shè)計
1) 在程序頭部定義系統(tǒng)時間變量、時分秒變量
2)定義PI變量
#define PI 3.14159263)引入數(shù)學文件、時間頭文件
#include<cmath> #include<ctime>4)在初始化函數(shù)中獲取系統(tǒng)時間,分別獲取時分秒數(shù)據(jù)。
void init() {GetLocalTime(&timeNow); //獲取系統(tǒng)時間hh = timeNow.wHour;mm = timeNow.wMinute;ss = timeNow.wSecond; }5)繪制函數(shù)display()中計算時、分、秒,確定繪制時分秒針的起始點坐標。
//xc,yc為時針中心點坐標//xs,ys為秒針終止點坐標//xm,ym為分針終止點坐標float xs, ys, xm, ym, xh, yh;float xc = 0, yc = 0;//Calculatexs = xc + R * cos(PI / 2.0 - ss / 60 * 2 * PI);ys = yc + R * sin(PI / 2.0 - ss / 60 * 2 * PI);xm = xc + R * cos(PI / 2.0 - (mm + ss / 60.0) / 60.0*2.0*PI);ym = yc + R * sin(PI / 2.0 - (mm + ss / 60.0) / 60.0*2.0*PI);xh = xc + (R - 5)*cos(PI / 2.0 - (hh + (mm + ss / 60.0) / 60.0) / 12.0*2.0*PI); yh = yc + (R - 5)*sin(PI / 2.0 - (hh + (mm + ss / 60.0) / 60.0) / 12.0*2.0*PI); 6)以直線方式繪制時、分、秒針。glColor3f(1, 0, 0);glBegin(GL_LINES);glVertex2f(xc, yc);glVertex2f(xs, ys);glEnd();glColor3f(1, 1, 0);glBegin(GL_LINES);glVertex2f(xc, yc);glVertex2f(xm, ym);glEnd();glColor3f(0, 1, 1);glBegin(GL_LINES);glVertex2f(xc, yc);glVertex2f(xh, yh);glEnd();7)繪制靜止正六邊形
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glLineWidth(2.0);glColor3f(1, 1, 1);glBegin(GL_POLYGON);for (int i = 0; i < n; i++) { //繪制正六邊形glVertex2f(R*cos(theta + i * 2 * PI / n), R*sin(theta + i * 2 * PI / n));}glEnd();8)在時間函數(shù)mytime(t)中設(shè)置重復獲取系統(tǒng)當前時間。
void idletime(int t) {GetLocalTime(&timeNow); //獲取系統(tǒng)時間hh = timeNow.wHour;mm = timeNow.wMinute;ss = timeNow.wSecond;glutTimerFunc(1000, idletime, 10);glutPostRedisplay(); //重繪函數(shù) }觀察到簡單時鐘的顯示,時分針秒針以時鐘的形式呈現(xiàn)在視區(qū)中,并以當前的時間正確顯示。
效果圖
完整代碼:
總結(jié)
以上是生活随笔為你收集整理的计算机图形学 实验二 OpenGL简单动画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各硬盘编号含义
- 下一篇: 5G NR标准协议架构-5G协议应该怎么