一、實(shí)驗(yàn)?zāi)康?/p>
1.掌握OpenGL的鼠標(biāo)按鈕響應(yīng)函數(shù)。
2.掌握OpenGL的鼠標(biāo)移動(dòng)響應(yīng)函數(shù)。
3.進(jìn)一步鞏固OpenGL的基本圖元繪制基礎(chǔ)。
二、實(shí)驗(yàn)內(nèi)容
1.鼠標(biāo)畫草圖——實(shí)現(xiàn)鼠標(biāo)點(diǎn)到哪,線就畫到哪。
思路:
1)在主程序注冊(cè)鼠標(biāo)響應(yīng)和鼠標(biāo)移動(dòng)子函數(shù):
glutMouseFunc(mymouse);
glutMotionFunc(mymotion);
放在display注冊(cè)之后和mainloop之前。
- 在程序頭部聲明鼠標(biāo)響應(yīng)和鼠標(biāo)移動(dòng)子函數(shù):
- void?myMouse(int?button,int?state,int?x,int?y);
- void?myMotion(int?x,int?y);
- 3)構(gòu)造鼠標(biāo)響應(yīng)子函數(shù):
- //?鼠標(biāo)按鈕響應(yīng)事件
- void?myMouse(int?button,int?state,int?x,int?y)
- {
//鼠標(biāo)左鍵按下——確定起始點(diǎn)
//鼠標(biāo)左鍵松開(kāi)——畫最后一個(gè)頂點(diǎn),畫線結(jié)束
}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-419011.html
4)構(gòu)造鼠標(biāo)移動(dòng)子函數(shù):
//鼠標(biāo)移動(dòng)時(shí)獲得鼠標(biāo)移動(dòng)中的坐標(biāo)
void?myMotion(int?x,int?y)
{
//鼠標(biāo)移動(dòng)——線畫到哪
}文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-419011.html
5)修改顯示函數(shù)Display():
//畫直線程序框架
#include?"stdafx.h"
#include?<glut.h>
int?ww,hh;?//顯示窗口寬和高
void?Myinit(vold);
void?Reshape?(int?w,?int?h);
void?Display(void);
int?APIENTRY?tWinMain(HINSTANCE?hInstance,
HINSTANCE?hPrevInstance,
LPTSTR?lpCmdLine,
int?nCmdShow)
{
UNREFERENCED?PARAMETER?(hPrevInstance)?;
UNREFERENCED_PARAMETER(1pCmdLine)?;
char?*argvl]?=?("hello?".?
int?argc?=?2;?//?argv?中的字符串?dāng)?shù)
glutInit(6argc,?argv)?;?//?初始化?GLUT?庫(kù)
glutInitWindowSize(800,?600)?;?//?設(shè)置顯示窗口大小
glutInitDisplayMode?(GLUT_DOUBLE?|?GLUT_RGB);?//?設(shè)置顯示模式?(注意雙緩存)glutCreateWindow(”鼠標(biāo)畫線小程序演示");?//?創(chuàng)建顯示窗口
Myinit();
glutDisplayFunc(Display);?//?注冊(cè)顯示回調(diào)函數(shù)
glutReshapeFunc(Reshape);?//注冊(cè)窗口改變回調(diào)函數(shù)
glutMainLoop();?//進(jìn)入事件處理循環(huán)
return?0;
}
void?Myinit(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glLineWidth(3.0);
}
//?渲染繪制子程序
void?Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);?//?刷新顏色緩存區(qū)
g1Begin(GL_LINES);
glVertex2f(0,0);
glVertex2f(ww,hh);
glEnd();
glutSwapBuffers();?//?雙緩存的刷新模式
}
void?Reshape(int?w,?int?h)?//?窗口改變時(shí)自動(dòng)獲取顯示窗口的寬w和高?h
{
glMatrixMode?(GL_PROJECTION)?;?//?投影矩陣模式
qlLoadIdentity();?//?矩陣堆棧清空
glViewport(0,?0,?w,?h);?//?設(shè)置視區(qū)大小
g1uOrtho2D(0,?w,?0,?h);?//?設(shè)置裁剪窗口大小
ww=W;
hh=h;
}
}
- 鼠標(biāo)畫線。閱讀OpenGL鼠標(biāo)畫線程序,能夠?qū)崿F(xiàn)在繪制窗口用鼠標(biāo)交互繪制若干條直線,鼠標(biāo)左鍵首先按下確定直線的起始點(diǎn),鼠標(biāo)左鍵按下同時(shí)移動(dòng),看到畫線過(guò)程,鼠標(biāo)左鍵松開(kāi)時(shí)確定直線的終點(diǎn),可重復(fù)畫多條直線。
- 思路:
- 1)寫出畫靜止若干條直線程序框架,坐標(biāo)用變量替代。
- 2)在主函數(shù)里注冊(cè)鼠標(biāo)按鈕響應(yīng)函數(shù)和鼠標(biāo)移動(dòng)響應(yīng)函數(shù)。
- 3)在鼠標(biāo)按鈕響應(yīng)子函數(shù)里給出鼠標(biāo)按鈕響應(yīng)事件。
- 4)在鼠標(biāo)移動(dòng)響應(yīng)子函數(shù)里給出鼠標(biāo)移動(dòng)響應(yīng)事件。
- 5)讀懂程序并分析程序,保留程序。
到了這里,關(guān)于計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)四 OpenGL的鼠標(biāo)交互繪制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!