• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于GLUT的OpenGL應(yīng)用程序框架構(gòu)建

    2007-08-25 01:30:42王繼東等
    關(guān)鍵詞:文件夾調(diào)用實(shí)例

    王繼東等

    王繼東龐明勇李建生

    摘要:介紹了GLUT的設(shè)計(jì)原理和功能,闡述了基于GLUT構(gòu)建OpenGL應(yīng)用程序框架的步驟。并給出一個(gè)具體的應(yīng)用程序?qū)嵗?/p>

    關(guān)鍵詞:GLUTOpenGL應(yīng)用程序框架

    1GLUT設(shè)計(jì)原理與功能

    GLUT是用ANSI C和FORTRAN語(yǔ)言實(shí)現(xiàn)的一個(gè)編程接口,其API是獨(dú)立于窗口系統(tǒng)的,所以它不返回任何活動(dòng)的窗口句柄、指針及其他數(shù)據(jù)結(jié)構(gòu)。GLUT簡(jiǎn)化了應(yīng)用OpennGL渲染的過(guò)程,通過(guò)GLUT的API只需簡(jiǎn)單的幾步就能為OpenGL創(chuàng)建一個(gè)可供渲染的窗口。它的設(shè)計(jì)和OpennGL一樣也是基于狀態(tài)機(jī)的,當(dāng)前窗口和當(dāng)前菜單是GLUT兩個(gè)最重要的狀態(tài),OpenGL中的函數(shù)一般只作用于這些狀態(tài)綁定的窗口。根據(jù)簡(jiǎn)單應(yīng)用程序的一般要求,GLUT合理地預(yù)定義了大部分的初始狀態(tài),從而簡(jiǎn)化了狀態(tài)設(shè)置過(guò)程。

    GLUT提供的功能包括多窗口OpenGL渲染、回調(diào)模式驅(qū)動(dòng)的程序執(zhí)行方式、完整的輸入設(shè)備、提供系統(tǒng)閑置時(shí)調(diào)用的idle函數(shù)、提供彈出式菜單、提供常用的線框和實(shí)體模型的繪制、支持圖像/圖形字體的繪制、其它的窗口管理功能(包括管理重疊層)等,這些功能基本滿足了OpenGL圖形應(yīng)用程序開發(fā)的需要。

    2基于GLUT構(gòu)建OpenGL應(yīng)用程序框架的方法

    基于GLUT構(gòu)建OpenGL的應(yīng)用程序框架可以按照以下幾個(gè)步驟進(jìn)行:

    (1)初始化和創(chuàng)建窗口。在任何GLUT子程序之前,應(yīng)首先調(diào)用能夠處理命令行選項(xiàng)的gutlnit()函數(shù)對(duì)GLUT庫(kù)進(jìn)行初始化,然后,再調(diào)用glutInitDisplayMode()、glu-tlnitWindowSize()、glutInitWindowPosition()對(duì)窗口的顯示模式、大小以及窗口在屏幕中的位置進(jìn)行設(shè)置,最后,調(diào)用gutCreateWindow()函數(shù)創(chuàng)建新窗口;(2)設(shè)置OoenGL初始狀態(tài)。一般在窗口創(chuàng)建成功后,我們將要對(duì)OpenGL初始狀態(tài)進(jìn)行設(shè)置。如使用glColor*()函數(shù)設(shè)置當(dāng)前顏色,使用glLingIlt*()函數(shù)設(shè)置光源屬性,使用gIBlendFunc()函數(shù)設(shè)置混合操作,使用glEnable()和glDisable()函數(shù)激活和關(guān)閉各種狀態(tài)開關(guān)等;(3)注冊(cè)回調(diào)函數(shù)。在程序進(jìn)入主循環(huán)之前,應(yīng)對(duì)回調(diào)函數(shù)進(jìn)行0注冊(cè)。常用的注冊(cè)回調(diào)函數(shù)有:glutDisplayFunc()函數(shù)、glutReshapeFunc()函數(shù)、glutKeyboardFunc()函數(shù)、glutSpecialFunc()函數(shù)、glutInit()函數(shù)。(4)進(jìn)入GLUT事件處理循環(huán)。在完成前面所有設(shè)置后,就可以通過(guò)glutMainLoop()函數(shù)進(jìn)入GLUT事件處理循環(huán)。當(dāng)某事件被激活,應(yīng)用程序?qū)⒄{(diào)用相應(yīng)的已注冊(cè)回調(diào)函數(shù)實(shí)現(xiàn)特定的功能,如窗口重繪、鍵盤交互、鼠標(biāo)交互等。

    3應(yīng)用程序?qū)嵗?/p>

    在Windows2000和VC6.0環(huán)境下,建立一個(gè)基于GLUT的簡(jiǎn)單OpenGL程序?qū)嵗?shí)例主要是繪制一個(gè)半透明紋理的正方體,并可以使用鍵盤上的Home鍵和方向鍵控制正方體旋轉(zhuǎn)。

    3.1 Include文件及程序庫(kù)鏈接設(shè)置

    把glut.h、glut32.1ib文件復(fù)制到VC6.0程序文件夾下的子文件夾中(glut.h復(fù)制到Microsoft Visual Stu-dioVC98IncludeGL,glut32.1ib復(fù)制到Microsoft VisualStudioVC98Lib),把glut32.dll復(fù)制到操作系統(tǒng)所在文件夾的子文件夾中(一般為WlNNTsystem32)。

    打開VC6.0建立一個(gè)空的Win32控制臺(tái)程序并新建一個(gè)C++源文件。在C++源文件的開始處,除了包含其他必要頭文件以外還必須包含GLUT頭文件,代碼為:#in-elude。因?yàn)間lut.h文件中已包含了glu.h和g1.h文件,所以不需要再使用include命令包含這兩個(gè)文件了。

    程序庫(kù)的鏈接可以通過(guò)VC6.0的菜單選項(xiàng)“Project->settings”設(shè)置,不過(guò)這里我們使用更加靈活方便的命令行完成,這樣在Debug模式與Release模式之間切換時(shí)就不會(huì)出錯(cuò)。代碼如下:

    3.2程序主函數(shù)的編寫

    基于GLUT的OpenGL應(yīng)用程序框架主要在main()函數(shù)中構(gòu)建,代碼如下:

    3.3 OpenGL繪制與交互

    4結(jié)束語(yǔ)

    開發(fā)者使用GLUT能夠在不考慮開發(fā)平臺(tái)的基礎(chǔ)上直接進(jìn)行OpenGL圖形開發(fā),提高了應(yīng)用程序的開發(fā)效率降低了開發(fā)的門檻。

    猜你喜歡
    文件夾調(diào)用實(shí)例
    磁力文件夾
    核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    調(diào)動(dòng)右鍵 解決文件夾管理三大難題
    基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
    TC一鍵直達(dá)常用文件夾
    電腦迷(2015年1期)2015-04-29 21:24:13
    完形填空Ⅱ
    完形填空Ⅰ
    利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
    体育| 大名县| 沙湾县| 衡阳县| 邛崃市| 鄂托克旗| 宜川县| 敦煌市| 东宁县| 枣庄市| 瑞安市| 什邡市| 清流县| 漯河市| 崇明县| 泸州市| 监利县| 高阳县| 中阳县| 文化| 阳高县| 延寿县| 商南县| 临邑县| 拉萨市| 遂昌县| 本溪市| 子洲县| 西乌| 昆明市| 天台县| 河曲县| 沂水县| 广丰县| 进贤县| 互助| 大竹县| 娱乐| 小金县| 宜兰县| 溧阳市|