基于glut庫的openGl的機器人手臂代碼詳解
機器人手臂源代碼網址:
https://blog.csdn.net/yueyansheng2/article/details/54095346?utm_source=blogxgwz4
Study Process
glClearColor(0.0, 0.0, 0.0, 0.0);
【glClearColor ( ) 就是用來設定這個 “ 底色 ” 的,即所謂的背景顔色。glClearColor ( ) 隻起到Set 的作用,并不Clear 任何。
void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);紅、綠、藍和 alpha 值,alpha 指定顔色中的α成分,指定值範圍均為[ 0.0f,1.0f ]
glClearColor(1.0, 0.0, 0.0, 1.0);//紅色
參考CSDN網址:https://blog.csdn.net/hebbely/article/details/69951068
】
glShadeModel(GL_FLAT);
【glShadeModel ( ) 函數用于控制顔色的過渡模式。 繪制指定兩點間其他點顔色的過渡模式。
參數一般為 GL_SMOOTH ( 預設 ) 或 GL_FLAT。GL_SMOOTH 會出現過渡效果】
glClear(GL_COLOR_BUFFER_BIT);
【glClear ( ) 是用來清除螢幕顔色,即将螢幕的所有像素點都還原為 “底色 ”
void glClear(GLbitfield mask);mask 對指定需要清除的緩存進行按位或屏蔽操作,值如下表:
GL_COLOR_BUFFER_BIT 指定目前被激活為寫操作的顔色緩存
GL_DEPTH_BUFFER_BIT 深度緩存
GL_ACCUM_BUFFER_BIT 累加緩存
GL_STENCIL_BUFFER_BIT 模闆緩存】
glPushMatrix();
【功能是将目前矩陣堆棧推送,用法是void WINAPI glPushMatrix(void)
将需要執行的縮放、平移等操作放在glPushMatrix和glPopMatrix之間
https://blog.csdn.net/qq_16334327/article/details/78258183
】
glTranslatef(-1.0, 0.0, 0.0);
【沿着 X, Y 和 Z 軸移動。
1.X坐标軸從左至右,Y坐标軸從下至上,Z坐标軸從裡至外。
2.OpenGL螢幕中心的坐标值是X和Y軸上的0.0f點。
3.中心左面的坐标值是負值,右面是正值。 移向螢幕頂端是正值,移向螢幕底端是負值。 移入螢幕深處是負值,移出螢幕則是正值。
https://blog.csdn.net/code_ac/article/details/60970103
】
glRotatef((GLfloat)shoulder, 0.0, 0.0, 1.0);
【glRotatef(angle, x, y, z) 】
glScalef(2.0, 0.4, 1.0);
【模型縮放函數,這個物體的每個點的x,y,z坐标與對應的xyz參數相乘。
void glScalef(GLfloat x, GLfloat y, GLfloat z);
如glScalef(2.0f,3.0f,4.0f);将模型按x,y,z方向分别拉伸了2,3,4倍。
參數也可取負數,也可以了解為先關于某軸翻轉180°,再縮放
如glScalef(1.0f,1.0f,-2.0f);将模型關于z軸翻轉了180°,再拉伸2倍。
https://blog.csdn.net/code_ac/article/details/62054366
】
glutWireCube(1.0);
【畫線框立方體
void glutWireCube(GLdouble size);
https://blog.csdn.net/Augusdi/article/details/7076734
】
glutSwapBuffers()
【實作雙緩沖技術,該函數的功能是交換兩個緩沖區指針。
緩沖explain:通常, 我們所看到的窗體、文字、圖像,從根本上來說都是“畫”出來的。比如,制作一個簡單的五子棋, 我們可能先要繪制棋盤,然後繪制棋子,我們可能還要繪制一些提示資訊。雖然這些繪制操作有一定的先後順序,通常情況下,作業系統的這些繪制速度非常的快,使人眼誤認為這些繪制操作是同時完成的。但當我們進行複雜的繪圖操作時,畫面便可能有明顯的閃爍。解決這個問題的關鍵在于使繪制的東西同時出現在螢幕上。所謂雙緩沖技術, 是指使用兩個緩沖區: 前台緩沖和背景緩沖。前台緩沖即我們看到的螢幕,背景緩沖則在記憶體當中,對我們來說是不可見的。每次的所有繪圖操作都在背景緩沖中進行, 當繪制完成時, 把繪制的最終結果複制到螢幕上, 這樣, 我們看到所有GDI元素同時出現在螢幕上,進而解決了頻繁重新整理導緻的畫面閃爍問題。
https://blog.csdn.net/u012442207/article/details/45223261
】
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
【在OpenGL初始化完成之後,我們應該進行一些視圖設定。首先是設定視見區域,調用glViewPort函數來決定視見區域,即告訴OpenGL應把渲染之後的圖形繪制在窗體的哪個部位
參數X,Y指定了視見區域的左下角在視窗中的位置,一般情況下為(0,0),Width和Height指定了視見區域的寬度和高度。
glViewport(GLint x,GLint y,GLsizei width,GLsizei height)為其函數原型。https://blog.csdn.net/sj19890401/article/details/19976667
】
glMatrixMode(GL_PROJECTION);
【這個函數其實就是對接下來要做什麼進行一下聲明
也就是在要做下一步之前告訴計算機我要對“什麼”進行操作了,這個“什麼”在glMatrixMode的“()”裡的選項(參數)有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型視圖, GL_TEXTURE 紋理.
在操作投影矩陣以前,需要調用函數:glMatrixMode(GL_PROJECTION); //将目前矩陣指定為投影矩陣
然後把矩陣設為機關矩陣:glLoadIdentity();
然後調gluPerspective(),它們生成的矩陣會與目前的矩陣相乘,生成透視的效果;
https://blog.csdn.net/jing16337305/article/details/80337800
】
glLoadIdentity();
【函數的功能是重置目前指定的矩陣為機關矩陣 機關矩陣就是對角線上都是1,其餘元素皆為0的矩陣。
是用一個4×4的機關矩陣來替換目前矩陣,實際上就是對目前矩陣進行初始化,也就是說,在該指令執行後,目前矩陣均恢複成一個機關矩陣
當您調用glLoadIdentity()之後,您實際上将目前點移到了螢幕中心:類似于一個複位操作
https://blog.csdn.net/caoshangpa/article/details/80264007
】
gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0)
【fovy,眼睛睜開的角度,如果為180,那麼可以認為你的視界很廣闊;
aspect,這個好了解,就是實際視窗的縱橫比,即x/y,影響到視野的截面有多大。
zNear,近裁剪面到眼睛的距離
zFar表示遠裁剪面到眼睛的距離
gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
https://blog.csdn.net/tyxkzzf/article/details/40921713
】
glMatrixMode(GL_MODELVIEW);
【GL_MODELVIEW是對模型視景矩陣操作 接下來的語句描繪一個以模型為基礎的适應
glMatrixMode是用來指定哪一個矩陣是目前矩陣,而它的參數代表要操作的目标,GL_PROJECTION是對投影矩陣操作,GL_TEXTURE是對紋理矩陣進行随後的操作。
切換目前矩陣,置透視投影設定完成後開始畫圖,需要切換到 模型視圖矩陣 才能正确畫圖.glMatrixMode(GL_MODELVIEW);
https://blog.csdn.net/siyue0211/article/details/74784170
】