資源簡介
圖形圖像課程設計,運用opengl做的時鐘,基于WIN32環境。

代碼片段和文件信息
#define?GLUT_DISABLE_ATEXIT_HACK
#pragma?comment(lib?“glaux.lib“)
#include?“gl\glaux.h“
#include?
#include?
#include?
#include?
#include??????//獲取系統時間
using?namespace?std?;
#define?circleDispList?1
#define?PI?3.14
int?hourminutesecond;
int?currentClock=1; //當前時鐘初始化為第一個
#define?TEXNUM?????1??//創建的紋理ID個數
GLuint?texobject[TEXNUM];//存儲創建的紋理ID的數組
AUX_RGBImageRec*?img;????//圖像的紋理儲存
//Scroll
void?waibian()
{
glEnable(GL_TEXTURE_2D); //啟動二維紋理
glTexEnvi(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODE?GL_REPLACE);//設置紋理參數
glBindTexture(GL_TEXTURE_2D?texobject[0]);//綁定紋理,載入所選圖片
glBegin(GL_POLYGON);//參數指定繪制圖元的方式
glTexCoord2f(00);?????//紋理坐標
glVertex2f(-1-1);//對應的矩形坐標
glTexCoord2f(-01);
glVertex2f(-11);
glTexCoord2f(11);
glVertex2f(11);
glTexCoord2f(10);
glVertex2f(1-1);
glEnd();
glDisable(GL_TEXTURE_2D);
}
void?Circle() //時鐘外圓及刻度點的繪畫
{
glNewList(circleDispListGL_COMPILE);//顯示列表circleDispList用來保存分配的顯示列表的索引,顯示列表是用來存儲和執行
glColor3f(101);
glPointSize(3);
glBegin(GL_POINTS);//單個頂點集,這些頂點的集合組成一個圓
for?(int?i=0;i<=1000;i++)
{
float?x=cos(i)/2y=sin(i)/2;
glVertex2f(xy);
}
glEnd();
glPointSize(6);???????//時鐘的刻度
glColor3f(000);
glBegin(GL_POINTS);
for?(int?j=0;j<=360;j+=30)
{
float?t=j*PI/180;//?t為弧度
float?x=cos(t)*0.9/2y=sin(t)*0.9/2;
glVertex2f(xy);
}
glEnd();
glEndList();
}
void?Pointer(int?currentClock) //時鐘指針的繪畫
{
time_t?t1=time(0);//獲取當前系統時間
????float?theta0=0theta1=0theta2=0;//定義時鐘的三根針的旋轉角度(弧度值)
theta0=6*localtime(&t1)->tm_sec*2*PI/360;//分離出秒針的逆時針旋轉角度
theta1=6*localtime(&t1)->tm_min*2*PI/360+theta0/60;//分離出分針的逆時針旋轉角度
????theta2=30*localtime(&t1)->tm_hour*2*PI/360+theta1/12;//分離出時針的逆時針旋轉角度
glColor3f(001);//秒針
glLineWidth(2);
glBegin(GL_LINES);
glVertex2f(00);
glVertex2f(0.45*sin(theta0)0.45*cos(theta0));
glEnd();
glColor3f(010); //分針
glLineWidth(3);??
glLineWidth(2);
glBegin(GL_LINES);
glVertex2f(00);
glVertex2f(0.35*sin(theta1)0.35*cos(theta1));
glEnd();
glColor3f(100);//時針
glLineWidth(3);?
glBegin(GL_LINES);
glVertex2f(00);
glVertex2f(0.25*sin(theta2)0.25*cos(theta2));
glEnd();
}
void?display()
{
glClear(GL_COLOR_BUFFER_BIT);
waibian();
glCallList(circleDispList);
Pointer(currentClock);
????glutSwapBuffers();
}
void?LoadTexture(char*?filename?int?index)
{
img?=?auxDIBImageLoad(filename);?//讀取圖象數據并將其返回
glBindTexture(GL_TEXTURE_2D?texobject[index]);?//設置載入圖片的索引號
glTexImage2D(GL_TEXTURE_2D?0?GL_RGB?img->sizeX?img->sizeY?0?GL_RGB?GL_UNSIGNED_BYTE?img->data);//圖像的紋理儲存
glTexParameteri(GL_TEXTURE_2D?GL_TEXTURE_MAG_FILTER?GL_NEAREST);//此為紋理過濾參數設置
glTexParameteri(GL_TEXTURE_2D?GL_TEXTURE_MIN_FILTER?GL_NEAREST);
}
void?wenli()
{
glGenTextures(TEXNUM?texobject);//創建紋理的ID
LoadTexture(“pic.bmp“?0);??????//載入各種紋理
}
void?re
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-06-20?07:25??Dazuoye\
?????文件????????4407??2014-06-04?15:31??Dazuoye\Dazuoye.dsp
?????文件?????????522??2014-06-04?15:31??Dazuoye\Dazuoye.dsw
?????文件???????33792??2014-06-20?07:23??Dazuoye\Dazuoye.ncb
?????文件???????48640??2014-06-20?07:23??Dazuoye\Dazuoye.opt
?????文件????????1084??2014-06-20?07:22??Dazuoye\Dazuoye.plg
?????目錄???????????0??2014-06-20?07:25??Dazuoye\Debug\
?????文件??????245838??2014-06-20?07:22??Dazuoye\Debug\Dazuoye.exe
?????文件??????376064??2014-06-20?07:22??Dazuoye\Debug\Dazuoye.ilk
?????文件??????549888??2014-06-20?07:22??Dazuoye\Debug\Dazuoye.pdb
?????文件???????28265??2014-06-04?15:31??Dazuoye\Debug\opengl.obj
?????文件?????6144054??2014-06-04?15:31??Dazuoye\Debug\pic.bmp
?????文件??????312320??2014-06-20?07:22??Dazuoye\Debug\vc60.idb
?????文件??????135168??2014-06-04?15:31??Dazuoye\Debug\vc60.pdb
?????文件????????3851??2014-06-04?15:31??Dazuoye\opengl.cpp
?????文件?????6144054??2014-06-04?15:31??Dazuoye\pic.bmp
?????目錄???????????0??2014-06-20?07:25??Dazuoye\效果圖\
?????文件???????69895??2014-06-04?15:31??Dazuoye\效果圖\1.jpg
?????文件???????68405??2014-06-04?15:31??Dazuoye\效果圖\2.jpg
?????文件???????66205??2014-06-04?15:31??Dazuoye\效果圖\3.jpg
?????文件????????3851??2014-06-04?15:31??Dazuoye\效果圖\總cpp.txt
評論
共有 條評論