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

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ù)(邏輯笛卡兒坐標映射為物理屏幕的象素坐標

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ù)使坐標系“復(fù)位”。

glMatrixMode(GL_MODELVIEW);        

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

 

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

glutDisplayFunc(RenderScene);

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

、實際清除

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

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

圖形繪制

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

 

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

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

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

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

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

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

 

 

3)顯示動畫

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

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

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

 

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

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

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

二、  繪圖

1、   繪點

glBegin(GL_POINTS);     //的定點到放在函數(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                                 單一點

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

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

GL_LINE_LOOP          畫線條,最后一點與第一點相連。

GL_TRIANGLES          每三個頂點指定一個新三角形,并用當前顏色填充

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

 

 

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

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

GLfloat sizes[2] //保存繪制點的尺寸范圍

GLfloat step //保存繪制點尺寸的步長

glGetFloatv(GL_POINT_SIZE_RANGEsizes)

glGetFloatv(GL_POINT_SIZE_GRANULARITY&step)

 

2、   繪制直線

glBegin(GL_LINES)        // GL_LINES每兩個頂點定義一條直線    

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 會使模式中的每一位代表一行中2 個象素的開或關(guān)。pattern 0X00FF,可以畫出點劃線

3、   多邊形的繪制

注意事項:

繞法

如果要反轉(zhuǎn)OpenGL 的默認行為,可以調(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 是默認值,生成填充的多邊形;

GL_LINE 生成多邊形的輪廓;

GL_POINT 只畫出頂點。

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

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

 

   

4、   多面體的繪制

1. 深度測試

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

glEnable(GL_DEPTH_TEST)

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

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

沖區(qū):

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

2. 隱藏表面

 

5、    

 

 

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

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

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

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

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

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

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

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

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

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

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

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

button為鼠標的按鍵,為以下定義的常量

GLUT_LEFT_BUTTON

鼠標左鍵

GLUT_MIDDLE_BUTTON

鼠標中鍵

GLUT_RIGHT_BUTTON

鼠標右鍵

state為鼠標按鍵的動作,為以下定義的常量

GLUT_UP

鼠標釋放

GLUT_DOWN

鼠標按下

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

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

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

Func為注冊的鼠標移動函數(shù)

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

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

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

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

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

GLUT_NOT_VISIBLE

窗口完全不可見

GLUT_VISIBLE

窗口可見或部分可見

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

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

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

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

state為鼠標的進出狀態(tài),為以下常量之一:

GLUT_LEFT

鼠標離開窗口

GLUT_RIGHT

鼠標進入窗口

當窗口取得焦點或失去焦點時調(diào)用這個函數(shù),當鼠標進入窗口區(qū)域并點擊時,stateGLUT_RIGHT,當鼠標離開窗口區(qū)域點擊其他窗口時,stateGLUT_LEFT.

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

設(shè)置當前窗口的特定鍵的回調(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為當按下鍵時鼠標的坐標,相對于窗口左上角,以像素為單位
注意
: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是當前是否使用菜單,為以下定義的常量

GLUT_MENU_IN_USE

菜單正在使用

GLUT_MENU_NOT_IN_USE

菜單未被使用

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

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

GLUT_MENU_IN_USE

菜單正在使用

GLUT_MENU_NOT_IN_USE

菜單未被使用

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

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

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

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

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

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

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

msecs是等待的時間

Func是注冊的函數(shù)

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

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

posted on 2011-09-13 16:00 Yu_ 閱讀(532) 評論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美精品午夜视频| 亚洲理论在线| 亚洲一区网站| 亚洲私人黄色宅男| 国产亚洲视频在线观看| 又紧又大又爽精品一区二区| 亚洲免费观看在线观看| 久久久99精品免费观看不卡| 亚洲欧洲另类国产综合| 亚洲婷婷综合色高清在线 | 亚洲一二三区在线观看| 亚洲高清精品中出| 国产精品久久久久久久午夜片| 亚洲国产小视频| 亚洲影院在线观看| 欧美黄色一区| 国产精品人成在线观看免费 | 99ri日韩精品视频| 国产婷婷色综合av蜜臀av| 亚洲欧美一区二区激情| 亚洲精品网址在线观看| 免费久久99精品国产自| 1000精品久久久久久久久| 久久国产加勒比精品无码| 亚洲视频第一页| 亚洲大胆在线| 欧美一区二区三区四区在线| 国产欧美韩国高清| 亚洲激情欧美| 亚洲福利国产精品| 欧美在线一二三四区| 黄色精品一二区| 亚洲一区免费网站| 亚洲一区二区三区在线| 亚洲永久在线| 中文亚洲欧美| 欧美日本亚洲| 亚洲韩国青草视频| 亚洲片国产一区一级在线观看| 欧美黑人在线观看| 国产自产精品| 欧美怡红院视频一区二区三区| 国产日本欧美一区二区三区在线| 久久精品国产精品亚洲| 欧美在线影院| 久久av二区| 国产日本欧美一区二区| 免费日韩av| 激情文学综合丁香| 久久亚洲不卡| 欧美激情aaaa| 日韩一二三在线视频播| 亚洲无线视频| 亚洲夜晚福利在线观看| 欧美一区二区三区男人的天堂| 精品1区2区3区4区| 欧美专区一区二区三区| 亚洲精品裸体| 麻豆精品网站| 亚洲第一主播视频| 日韩午夜中文字幕| 欧美视频在线观看| 亚洲欧美成人一区二区三区| 亚洲精品影视| 欧美精品在线观看| 亚洲视频狠狠| 欧美在线一二三四区| 欧美成人午夜视频| 亚洲国产精品一区在线观看不卡| 国产精品亚洲аv天堂网| 久久免费视频网站| 在线观看三级视频欧美| 一区二区三欧美| 亚洲一区二区三区高清不卡| 久久一区亚洲| 亚洲电影免费观看高清| 久久躁狠狠躁夜夜爽| 欧美成人精品在线播放| 在线亚洲电影| 国产精品视频成人| 久久九九热re6这里有精品| 亚洲一区二区三区免费在线观看| 久久精品99国产精品| 一区二区三区高清在线| 久久九九国产精品怡红院| 一区二区高清视频| 国产精品女主播在线观看| 亚洲精品国产视频| 午夜激情亚洲| 亚洲国产午夜| 国产美女精品视频| 欧美电影免费观看大全| 久久午夜视频| 日韩西西人体444www| 免费亚洲电影| 在线一区二区三区四区| 99re热这里只有精品视频| 久久精品二区三区| 亚洲理伦在线| 免费黄网站欧美| 香蕉成人啪国产精品视频综合网| 国产精品成人一区二区网站软件| 亚洲国产激情| 欧美在线|欧美| 99在线观看免费视频精品观看| 老司机免费视频久久| 卡通动漫国产精品| 亚洲欧美国产va在线影院| 欧美午夜久久久| 另类酷文…触手系列精品集v1小说| 久久精品一区蜜桃臀影院| 国产日韩免费| 欧美日韩亚洲国产一区| 一本色道久久综合一区| 一区二区av| 在线观看亚洲精品| 国产一区二区三区在线观看视频| 欧美在线一二三| 亚洲一区在线视频| 亚洲乱亚洲高清| 欧美高清视频www夜色资源网| 亚洲国产导航| 国产一区二区三区久久久| 久久国产精品久久精品国产| 久久久国产亚洲精品| 国产一区二区三区四区在线观看 | 一区二区在线观看视频在线观看| 午夜一区二区三区不卡视频| 久久久91精品国产一区二区精品| 国产曰批免费观看久久久| 午夜在线成人av| 中文欧美日韩| 一区二区三区成人精品| 欧美一区二区精美| 亚洲男人av电影| 亚洲制服av| 国产精品99久久不卡二区| 国产亚洲毛片在线| 国产精品最新自拍| 国产欧美成人| 在线电影一区| 亚洲黄色影院| 一道本一区二区| 亚洲一区二区三区久久| 中文av一区特黄| 国产精品视频九色porn| 欧美va亚洲va日韩∨a综合色| 99国产精品久久久久久久久久| 黄网站免费久久| 国产一区二区三区电影在线观看| 蜜臀久久99精品久久久久久9 | 欧美激情aaaa| 久久久久久久波多野高潮日日| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精品美女久久7777777| 欧美日韩高清在线观看| 香蕉国产精品偷在线观看不卡| 久久综合狠狠综合久久激情| 在线中文字幕日韩| 亚洲曰本av电影| 欧美一级片久久久久久久| 亚洲高清一区二区三区| 国产精品福利久久久| 久久精品国产精品亚洲综合| 亚洲精品三级| 亚洲午夜久久久久久久久电影院| 美女成人午夜| 亚洲国产欧美不卡在线观看| 久久九九免费| 欧美国产精品v| 一本久久精品一区二区| 亚洲成人在线视频网站| 国产目拍亚洲精品99久久精品| 先锋a资源在线看亚洲| 亚洲国产老妈| 亚洲人被黑人高潮完整版| 欧美一区二区大片| 美女91精品| 一本大道久久精品懂色aⅴ| 欧美成人久久| 一个色综合av| 久久亚洲综合色| 欧美视频在线观看 亚洲欧| 欧美国产日产韩国视频| 久久福利视频导航| 欧美激情一区二区三区四区| 久久精品免费播放| 欧美国产一区二区在线观看 | 亚洲欧美日韩综合| 久久狠狠亚洲综合| 亚洲激情亚洲| 欧美与欧洲交xxxx免费观看| 亚洲欧美国产不卡| 男人的天堂亚洲在线| 美女999久久久精品视频| 久久激情综合| 国产精品久久久一区二区| 欧美日韩成人综合在线一区二区| 免费成人av在线看| 国产一区二区|