青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 34,comments - 2,trackbacks - 0

一、      工作原理

1)、OpenGL流水線

 

命名約定:

2)、顯示形狀

函數(shù)功能:設(shè)置初始顯示模式。

函數(shù)原型:void glutInitDisplayMode(unsigned int mode);

  mode : mode可取以下值或其組合:

              對應(yīng)宏定義      意義

GLUT_RGB       0x0000            指定 RGB 顏色模式的窗口

GLUT_RGBA          0x0000            指定 RGBA 顏色模式的窗口

GLUT_INDEX         0x0001            指定顏色索引模式的窗口

GLUT_SINGLE  0x0000            指定單緩存窗口

GLUT_DOUBLE 0x0002            指定雙緩存窗口

GLUT_ACCUM  0x0004            窗口使用累加緩存

GLUT_ALPHA         0x0008            窗口的顏色分量包含 alpha

GLUT_DEPTH   0x0010            窗口使用深度緩存

GLUT_STENCIL 0x0020            窗口使用模板緩存

GLUT_MULTISAMPLE0x0080               指定支持多樣本功能的窗口

GLUT_STEREO 0x0100            指定立體窗口

GLUT_LUMINANCE 0x0200            窗口使用亮度顏色模型

 

 

2再整形回調(diào)函數(shù)(邏輯笛卡兒坐標(biāo)映射為物理屏幕的象素坐標(biāo)

glutReshapeFunc(ChangeSize);     //

 

①、利用函數(shù)glViewport 定義視區(qū)

void glViewport(GLint xGLint yGLsizei widthGlsizei height)

②、利用函數(shù)glOrtho 定義修剪區(qū)

void glOrtho(Gldouble leftGldouble rightGldouble bottomGldouble topGldouble nearGldouble far)

調(diào)用函數(shù)glOrtho 之前,調(diào)用下面函數(shù)使坐標(biāo)系“復(fù)位”。

glMatrixMode(GL_MODELVIEW);        

glLoadIdentity();           //重置當(dāng)前指定的矩陣為單位矩陣,使坐標(biāo)系“復(fù)位”

 

3 顯示回調(diào)函數(shù)

glutDisplayFunc(RenderScene);

顯示回調(diào)函數(shù)RenderScene 是調(diào)用OpenGL 渲染函數(shù)的地方。

、實(shí)際清除

glClear(GL_COLOR_BUFFER_BIT); //用當(dāng)前清除色清除顏色緩沖區(qū),即設(shè)定窗口的背景色

指定當(dāng)前繪圖顏色          //調(diào)用glColor3f 設(shè)置

圖形繪制

刷新隊(duì)列   //glFlush()用于讓所有尚未執(zhí)行的OpenGL 命令都被執(zhí)行

 

由上面的程序可以看出,一個(gè)OpenGL 程序的基本結(jié)構(gòu)主要包括以下幾個(gè)部分:

1)定義窗口:包括指定窗口的大小、位置、顯示模式以及設(shè)置各種回調(diào)函數(shù);

2)初始化設(shè)置:清除各種緩沖區(qū),并設(shè)置各種OpenGL 狀態(tài),例如設(shè)置背景色,打開光照,設(shè)置紋理等等。

3)繪制場景:利用OpenGL 函數(shù)繪制場景中的各種物體。

4)變換:指定場景中需要顯示的范圍并指定由修剪區(qū)到視區(qū)的變換。

5)結(jié)束運(yùn)行:清除命令緩沖區(qū),執(zhí)行OpenGL 命令。

 

 

3)顯示動(dòng)畫

glutTimerFunc(unsigned int msecs(*func) (int value)int value);

該函數(shù)與其他的回調(diào)函數(shù)不一樣的地方在于該函數(shù)只會(huì)被激發(fā)一次。為了實(shí)現(xiàn)連

續(xù)的動(dòng)畫,必須在定時(shí)器函數(shù)中再次重新設(shè)置定時(shí)器回調(diào)函數(shù)。

 

注意1:顯示回調(diào)函數(shù)時(shí)的擦新方式。

glFlush()與glutSwapBuffers()的區(qū)別

簡單地說glFlush就是強(qiáng)制刷新吧,要知道OPENGL是使用一條渲染管線線性處理命令的,一般情況下,我們提交給OPENGL的指令并不是馬上送到驅(qū)動(dòng)程序里執(zhí)行的,而是放到一個(gè)緩沖區(qū)里面,等這個(gè)緩沖區(qū)滿了再一次過發(fā)到驅(qū)動(dòng)程序里執(zhí)行;很多時(shí)候只有幾條指令是填充不滿那個(gè)緩沖區(qū)的,這就是說這些指令根本沒有被發(fā)送到驅(qū)動(dòng)里,所以我們要調(diào)用glFlush來強(qiáng)制把這些指令送到驅(qū)動(dòng)里進(jìn)行處理。
glutSwapBuffers其實(shí)就是交換緩沖區(qū)啦,估計(jì)是你的程序使用的是雙緩沖技術(shù)吧;用了這種技術(shù)的話,你所有的繪制都是繪制到一個(gè)后臺(tái)的緩沖區(qū)里面的,如果不交換緩沖區(qū),就看不到繪制的東西了,就這么回事~

二、  繪圖

1、   繪點(diǎn)

glBegin(GL_POINTS);     //的定點(diǎn)到放在函數(shù)glBegin glEnd 之間,由函數(shù)glBegin 的參數(shù)指定繪制圖元的類型,                                   

glVertex3f(0.0f,0.0f,0.0f);

glVertex3f(10.0f,10.0f,10.0f);

glEnd();

 

 

glBegin的參數(shù)詳解:

GL_POINTS                                 單一點(diǎn)

GL_LINES                      兩頂點(diǎn)創(chuàng)建一直線

GL_LINE_STRIP          創(chuàng)建線條,上一點(diǎn)是下一點(diǎn)的延伸

GL_LINE_LOOP          畫線條,最后一點(diǎn)與第一點(diǎn)相連。

GL_TRIANGLES          每三個(gè)頂點(diǎn)指定一個(gè)新三角形,并用當(dāng)前顏色填充

GL_TRIANGLE_STRIP       創(chuàng)建相鄰的三角形

 

 

注意:可以使用void glPointSize(GLfloat size);來設(shè)計(jì)像素點(diǎn)大小

通常使用下面的代碼來獲取點(diǎn)大小的范圍和它們之間最小的中間值:

GLfloat sizes[2] //保存繪制點(diǎn)的尺寸范圍

GLfloat step //保存繪制點(diǎn)尺寸的步長

glGetFloatv(GL_POINT_SIZE_RANGEsizes)

glGetFloatv(GL_POINT_SIZE_GRANULARITY&step)

 

2、   繪制直線

glBegin(GL_LINES)        // GL_LINES每兩個(gè)頂點(diǎn)定義一條直線    

glVertex3f(0.0f0.0f0.0f)

glVertex3f(10.0f10.0f10.0f)

glEnd()

 

注意:

  void glLineWidth(GLfloat width)   //設(shè)置線寬

  glEnable(GL_LINE_STIPPLE)   //修改模式

  glLineStipple(GLint factorGLushort pattern)//factor 設(shè)為2 會(huì)使模式中的每一位代表一行中2 個(gè)象素的開或關(guān)。pattern 0X00FF,可以畫出點(diǎn)劃線

3、   多邊形的繪制

注意事項(xiàng):

繞法

如果要反轉(zhuǎn)OpenGL 的默認(rèn)行為,可以調(diào)用函數(shù):

glFrontFace(GL_CW)

、明暗處理

void glShadeModel(GLenum mode);

GL_FLAT                                        //平面明暗處理

GL_SMOOTH                                 //光滑明暗處理

  多邊形的模式

glPolygonMode(Glenum faceGlenum mode)

face

GL_FRONTGL_BACK GL_FRONT_AND_BACK   指定多邊形的哪一面受模式改變的影響

參數(shù)mode 用于指定新的繪圖模式。

GL_FILL 是默認(rèn)值,生成填充的多邊形;

GL_LINE 生成多邊形的輪廓;

GL_POINT 只畫出頂點(diǎn)。

GL_LINE GL_POINT 繪制的點(diǎn)和線受glEdgeFlag 所設(shè)置邊緣標(biāo)記的影響。

  、多邊形的繪制規(guī)則

 

   

4、   多面體的繪制

1. 深度測試

為了啟用深度測試,只要調(diào)用:

glEnable(GL_DEPTH_TEST)

如果要關(guān)閉深度測試,則只需調(diào)用glDisable(GL_DEPTH_TEST)即可。

另外為了使深度緩沖區(qū)正常完成深度測試功能,在每次渲染場景時(shí),必須先清除深度緩

沖區(qū):

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

2. 隱藏表面

 

5、    

 

 

回調(diào)函數(shù)

void glutDisplayFunc(void (*func)(void) );

為當(dāng)前窗口設(shè)置顯示回調(diào)函數(shù)

void glutOverlayDisplayFunc(void (*func)(void) );

注冊當(dāng)前窗口的重疊層的顯示回調(diào)函數(shù)

void glutReshapeFunc(void (*Func)(int width, int height) );

指定當(dāng)窗口的大小改變時(shí)調(diào)用的函數(shù)

void glutKeyboardFunc(void (*func) (unsigned char key, int x, int y) );

注冊當(dāng)前窗口的鍵盤回調(diào)函數(shù)

void glutMouseFunc(void (*func) (int button, int state, int x, int y));

注冊當(dāng)前窗口的鼠標(biāo)回調(diào)函數(shù)

func為注冊的鼠標(biāo)回調(diào)函數(shù),這個(gè)函數(shù)完成鼠標(biāo)事件的處理

button為鼠標(biāo)的按鍵,為以下定義的常量

GLUT_LEFT_BUTTON

鼠標(biāo)左鍵

GLUT_MIDDLE_BUTTON

鼠標(biāo)中鍵

GLUT_RIGHT_BUTTON

鼠標(biāo)右鍵

state為鼠標(biāo)按鍵的動(dòng)作,為以下定義的常量

GLUT_UP

鼠標(biāo)釋放

GLUT_DOWN

鼠標(biāo)按下

x,y為鼠標(biāo)按下式,光標(biāo)相對于窗口左上角的位置

void glutMotionFunc(void (*func)(int x, int y));
void glutPassiveMotionFunc(void (*func)(int x, int y));

設(shè)置移動(dòng)回調(diào)函數(shù);設(shè)置當(dāng)前鼠標(biāo)移動(dòng)函數(shù)

Func為注冊的鼠標(biāo)移動(dòng)函數(shù)

x,y為鼠標(biāo)按下式,光標(biāo)相對于窗口左上角的位置
當(dāng)鼠標(biāo)在窗口中按下并移動(dòng)時(shí)調(diào)用
glutMotionFunc注冊的回調(diào)函數(shù)
當(dāng)鼠標(biāo)在窗口中移動(dòng)時(shí)調(diào)用
glutPassiveMotionFunc注冊的回調(diào)函數(shù)

void glutVisibilityFunc(void (*func) (int state) );

設(shè)置當(dāng)前窗口的可視回調(diào)函數(shù)

Func為指定的可視回調(diào)函數(shù)

state表示窗口的可視性,為以下常量:

GLUT_NOT_VISIBLE

窗口完全不可見

GLUT_VISIBLE

窗口可見或部分可見

這個(gè)函數(shù)設(shè)置當(dāng)前窗口的可視回調(diào)函數(shù),當(dāng)窗口的可視性改變時(shí),該窗口的可視回調(diào)函數(shù)被調(diào)用.只要窗口中的任何一個(gè)像素是可見的,或者他的任意一個(gè)子窗口中任意一個(gè)像素是可見的,GLUT則認(rèn)為窗口是可見的.

void glutEntryFunc(void (*func) (int state));

設(shè)置鼠標(biāo)的進(jìn)出窗口的回調(diào)函數(shù)

Func為注冊的鼠標(biāo)進(jìn)出回調(diào)函數(shù)

state為鼠標(biāo)的進(jìn)出狀態(tài),為以下常量之一:

GLUT_LEFT

鼠標(biāo)離開窗口

GLUT_RIGHT

鼠標(biāo)進(jìn)入窗口

當(dāng)窗口取得焦點(diǎn)或失去焦點(diǎn)時(shí)調(diào)用這個(gè)函數(shù),當(dāng)鼠標(biāo)進(jìn)入窗口區(qū)域并點(diǎn)擊時(shí),stateGLUT_RIGHT,當(dāng)鼠標(biāo)離開窗口區(qū)域點(diǎn)擊其他窗口時(shí),stateGLUT_LEFT.

void glutSpecialFunc(void (*func) (int key, int x, int y))

設(shè)置當(dāng)前窗口的特定鍵的回調(diào)函數(shù)

Func為注冊的特定鍵的回調(diào)函數(shù)

key為按下的特定鍵,為以下定義的常量:

key常量

描述

GLUT_KEY_F1

F1功能鍵

GLUT_KEY_F2

F2功能鍵

GLUT_KEY_F3

F3功能鍵

GLUT_KEY_F4

F4功能鍵

GLUT_KEY_F5

F5功能鍵

GLUT_KEY_F6

F6功能鍵

GLUT_KEY_F7

F7功能鍵

GLUT_KEY_F8

F8功能鍵

GLUT_KEY_F9

F9功能鍵

GLUT_KEY_F10

F10功能鍵

GLUT_KEY_F11

F11功能鍵

GLUT_KEY_F12

F12功能鍵

GLUT_KEY_LEFT

左方向鍵

GLUT_KEY_UP

上方向鍵

GLUT_KEY_RIGHT

右方向鍵

GLUT_KEY_DOWN

下方向鍵

GLUT_KEY_PAGE_UP

PageUp

GLUT_KEY_PAGE_DOWN

PageDown

GLUT_KEY_HOME

Home

GLUT_KEY_END

End

GLUT_KEY_INSERT

Insert

x,y為當(dāng)按下鍵時(shí)鼠標(biāo)的坐標(biāo),相對于窗口左上角,以像素為單位
注意
:ESC,回車和delete鍵由ASCII碼產(chǎn)生.

void glutMenuStatusFunc(void (*func) (int status, int x, int y));

設(shè)置菜單狀態(tài)回調(diào)函數(shù)

func是注冊的菜單狀態(tài)回調(diào)函數(shù)

status是當(dāng)前是否使用菜單,為以下定義的常量

GLUT_MENU_IN_USE

菜單正在使用

GLUT_MENU_NOT_IN_USE

菜單未被使用

x,y是鼠標(biāo)按下式,光標(biāo)相對于窗口左上角的位置

這個(gè)函數(shù)時(shí)glut程序判定是否正在使用菜單,當(dāng)彈出菜單時(shí),調(diào)用注冊的菜單狀態(tài)回調(diào)函數(shù),同時(shí)status設(shè)置為常量 GLUT_MENU_IN_USE, 當(dāng)菜單使用完畢時(shí),也調(diào)用菜單狀態(tài)回調(diào)函數(shù),此時(shí)status變量變?yōu)?/span>GLUT_MENU_NOT_IN_USE.從已彈出的菜單中再彈出的菜單不產(chǎn)生菜單狀態(tài)回調(diào)過程.每個(gè)glut程序只有一個(gè)菜單狀態(tài)回調(diào)函數(shù).

glutSpaceballRotateFunc

glutSpaceballButtonFunc

glutButtonBoxFunc

glutDialsFunc

glutTabletMotionFunc

glutTabletButtonFunc

void glutMenuStatusFunc(void (*func) (int status, int x, int y));

設(shè)置菜單狀態(tài)回調(diào)函數(shù)

func為注冊的菜單狀態(tài)回調(diào)函數(shù)

status表示當(dāng)前是否使用菜單,為以下定義的常量

GLUT_MENU_IN_USE

菜單正在使用

GLUT_MENU_NOT_IN_USE

菜單未被使用

x,y表示鼠標(biāo)按下式,光標(biāo)相對于窗口左上角的位置

這個(gè)函數(shù)時(shí)glut程序判定是否正在使用菜單,當(dāng)彈出菜單時(shí),調(diào)用注冊的菜單狀態(tài)回調(diào)函數(shù),同時(shí)status設(shè)置為常量 GLUT_MENU_IN_USE, 當(dāng)菜單使用完畢時(shí),也調(diào)用菜單狀態(tài)回調(diào)函數(shù),此時(shí)status變量變?yōu)?/span>GLUT_MENU_NOT_IN_USE.從已彈出的菜單中再彈出的菜單不產(chǎn)生菜單狀態(tài)回調(diào)過程.每個(gè)glut程序只有一個(gè)菜單狀態(tài)回調(diào)函數(shù).

void glutIdleFunc(void (*func) (void));

設(shè)置空閑回調(diào)函數(shù)

func表示當(dāng)系統(tǒng)空閑時(shí)調(diào)用的函數(shù),它的形式為void func(void)

void glutTimerFunc(unsigned int msecs, void (*Func)(int value), int value);

注冊一個(gè)回調(diào)函數(shù),當(dāng)指定時(shí)間值到達(dá)后,GLUT調(diào)用注冊的函數(shù)一次

msecs是等待的時(shí)間

Func是注冊的函數(shù)

value是指定的一個(gè)數(shù)值,用來傳遞到回調(diào)函數(shù)Func

這個(gè)函數(shù)注冊了一個(gè)回調(diào)函數(shù),當(dāng)指定的毫秒數(shù)到達(dá)后,這個(gè)函數(shù)就調(diào)用注冊的函數(shù),value參數(shù)用來向這個(gè)注冊的函數(shù)中傳遞參數(shù).

posted on 2011-09-13 16:00 Yu_ 閱讀(532) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計(jì)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜久久久| 欧美日韩亚洲成人| 这里只有精品丝袜| 亚洲欧美日韩综合国产aⅴ| 久久午夜精品| 亚洲国产精品热久久| 亚洲国产一区二区三区a毛片 | 欧美freesex8一10精品| 99国内精品久久| 久久久久久久999| 国产精品成人一区二区三区吃奶| 在线观看亚洲a| 日韩视频在线观看免费| 国内精品嫩模av私拍在线观看| 在线亚洲欧美视频| 欧美sm重口味系列视频在线观看| 亚洲天堂av图片| 欧美大片在线观看| 一区二区三区亚洲| 亚洲国产成人精品久久| 久久久噜噜噜久久中文字免| 亚洲手机成人高清视频| 亚洲少妇诱惑| 亚洲激情在线| 欧美影院精品一区| 欧美日韩成人激情| 最新中文字幕亚洲| 欧美国产三级| 久久久亚洲精品一区二区三区| 国产精品久久久久高潮| 日韩视频免费在线观看| 午夜在线观看免费一区| 9l国产精品久久久久麻豆| 欧美国产1区2区| 亚洲国产成人精品久久久国产成人一区| 久久岛国电影| 一本色道久久综合亚洲精品按摩| 老司机一区二区| 亚洲精品综合精品自拍| 99国产精品国产精品久久 | 伊人夜夜躁av伊人久久| 欧美成年人视频网站| 欧美福利影院| 亚洲欧美综合网| 久久免费高清视频| 中文一区二区在线观看| 性色av一区二区三区在线观看| 1024精品一区二区三区| 日韩午夜激情av| 国产亚洲视频在线观看| 亚洲国产精品黑人久久久| 国产精品捆绑调教| 欧美成人免费网| 国产精品久久久对白| 免费在线观看一区二区| 欧美日韩亚洲一区| 欧美jjzz| 国产欧美在线视频| 亚洲欧洲一区| 狠狠色丁香婷综合久久| 日韩视频免费看| 激情综合色丁香一区二区| 日韩视频免费| 亚洲视频国产视频| 久久爱91午夜羞羞| 欧美激情第9页| 久久免费国产精品1| 欧美日韩国产精品| 蜜桃av久久久亚洲精品| 欧美网站在线观看| 欧美激情在线免费观看| 国产亚洲欧美aaaa| 一区二区三区免费在线观看| 亚洲国产va精品久久久不卡综合| 羞羞答答国产精品www一本| 在线午夜精品| 欧美精品一区二区在线播放| 老鸭窝亚洲一区二区三区| 国产精品久久网站| 亚洲精品偷拍| 亚洲精品四区| 免费在线一区二区| 久久一区中文字幕| 国产欧美va欧美不卡在线| 欧美成人午夜77777| 欧美日韩精品一区二区天天拍小说 | 午夜视频在线观看一区二区三区| 亚洲免费观看| 久久久亚洲成人| 午夜精品视频在线观看| 欧美日韩不卡| 亚洲欧洲日本专区| 亚洲国产美女| 老司机精品久久| 免费高清在线一区| 狠狠做深爱婷婷久久综合一区 | 亚洲精品网址在线观看| 久久先锋资源| 欧美电影免费网站| 亚洲高清不卡| 欧美精品成人在线| 亚洲精品一区二区三区四区高清 | 欧美mv日韩mv国产网站app| 红桃视频亚洲| 久久亚洲私人国产精品va媚药| 久久视频在线免费观看| 黄色成人在线免费| 久久女同精品一区二区| 欧美成人午夜激情| 日韩午夜在线视频| 国产精品扒开腿做爽爽爽视频| 国产精品99久久久久久宅男| 香蕉久久夜色精品国产使用方法 | 欧美一区二区播放| 国产亚洲毛片在线| 久久久久久久久久久久久女国产乱 | 欧美另类69精品久久久久9999| 亚洲成人在线网站| 在线亚洲精品福利网址导航| 国产精品网站在线| 久久久99国产精品免费| 亚洲成人资源| 午夜精品电影| 伊人色综合久久天天五月婷| 欧美成人午夜77777| 9色精品在线| 久久精品成人欧美大片古装| 亚洲第一搞黄网站| 国产精品久久久久久久久久久久| 午夜免费日韩视频| 亚洲国产精品久久久久| 亚洲欧美激情视频| 欧美三区在线视频| 久久久久高清| 日韩一区二区免费高清| 99视频热这里只有精品免费| 欧美精选午夜久久久乱码6080| 中文国产一区| 美乳少妇欧美精品| 亚洲一级免费视频| 在线成人欧美| 欧美性开放视频| 久久人人97超碰精品888| 日韩视频在线观看免费| 久热精品视频在线观看| 亚洲一二三区在线观看| 在线精品国产成人综合| 国产精品久久久| 欧美mv日韩mv国产网站| 欧美在现视频| 制服丝袜亚洲播放| 欧美激情亚洲激情| 久久久国产一区二区| 一区二区三区**美女毛片| 在线欧美一区| 国产日本亚洲高清| 欧美日韩国内| 欧美电影电视剧在线观看| 欧美制服丝袜第一页| 在线视频日韩精品| 亚洲精品1区2区| 老司机成人在线视频| 性色av一区二区三区在线观看| 一本大道久久精品懂色aⅴ| 精品999在线播放| 国产精品专区一| 国产精品国产三级国产aⅴ浪潮 | 狠狠色综合色区| 国产日韩欧美一区二区三区四区| 欧美理论电影在线观看| 欧美粗暴jizz性欧美20| 欧美综合第一页| 亚洲欧美一区二区在线观看| 夜夜嗨av色综合久久久综合网| 亚洲国产精品久久| 欧美肥婆bbw| 欧美激情一区| 亚洲成色777777女色窝| 欧美~级网站不卡| 欧美 日韩 国产一区二区在线视频| 久久久噜噜噜久久| 久久综合久久久| 麻豆成人在线播放| 免费不卡中文字幕视频| 欧美sm视频| 亚洲国产欧美一区二区三区丁香婷| 欧美激情精品久久久久久| 欧美激情第8页| 99国产一区| 亚洲欧美日韩精品一区二区| 欧美一区二区黄色| 久久精品免视看| 麻豆精品网站| 欧美日韩国产123区| 国产精品久久综合| 国产在线精品一区二区中文| 亚洲电影免费在线观看| 亚洲美女av黄| 亚洲专区一区二区三区| 久久精品首页|