[译]NeHe教程 - 你的第一个多边形
原文:?Your First Polygon
?
在第一節中我講解了如何創建OpenGL窗體.本節我會講解如何創建三角形和四邊形.我們會用GL_TRIANGLES來創建三角形,用GL_GUADS創建四邊形.
我們會添加到第一節代碼的DrawGLScene函數中.我會下面重新給出該函數的完整代碼.如果你打算在上一節的代碼中修改,你可以直接用以下代碼替換,或者增加上一節代碼沒有的部分.
int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth BufferglLoadIdentity(); // Reset The View?
當你調用glLoadIdentity函數時,前端的動作只是把視覺移回屏幕中間,其實就是在X軸從左到右,在Y軸從上到下,在Z軸從屏幕外部往內部移動.
屏幕的中間是X,Y軸的0.0f.而左邊就是負值.右邊是正值.向屏幕的頂部移動是正值,向底部移動是負值.向屏幕的深處移動是負值,向觀看者移動是正值.
glTranslatef(x, y, z)沿著X, Y和Z軸移動.下面的是在X軸上向左移動了1.5個單位.它在Y軸上沒有移動,并往屏幕內部移動了6.0個單位.當你執行時,你會發現并不是從屏幕中間移動,而是從你當前屏幕的位置移動.
glTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0?
現在我們需要移動到屏幕的左手邊,我們已經設置好足夠深入屏幕(-6.0)的視覺,可以看見創建三角形的整個場景.
glBegin(GL_TRIANGLES)的意思是我們要開始繪制三角形,而glEnt()函數告知OpenGL我們已經創建三角形完畢.通常來說,如果你要畫3個點的話可以用GL_TRIANGLES.大多數的顯卡畫三角形都是相當快的.如果你要畫4個點可以用GL_QUADS.我聽說的是,大多數顯卡在后臺是以三角形為單位繪制物體的.最后如果你需要繪制超過4個點的話,可以用GL_POLYGON.
在我們的簡單演示程序中,我們只畫了一個三角形.如果我們需要畫第二個三角形,我們可以直接追加三行新的位置代碼到原來的三行代碼后面.這樣6行代碼都嵌套在glBegin(GL_TRIANGLES)和glEnd()函數之間.不用每次畫3個點都用這兩個函數包含一次.四邊形也同理,如果你已經知曉你要創建的所有四邊形的位置,你可以全部嵌套在glBegin(GL_TRIANGLES)和glEnd()函數之間.另一方面,多邊形(GL_POLYGON)可以由任意個點組成,所以你嵌套多少行代碼在glBegin(GL_POLYGON)和glEnd()之間都無所謂.
glBegin函數后面的第一行,是設置多邊形的第一個點.頂點(glVertex)的第一個數值是X軸的值,第二個值是Y軸,第三個值是Z軸.第一個行中,我們不在X軸和Y軸上移動,只在Y軸上移動一個單位.這個是三角形的頂部的點.第二個頂點(glVertex)在X軸向左移動了一個單位,在Y軸向下移動了一個單位.這個是三角形的左下角的點.第三個頂點(glVertex)向右移動了一個單位,向下移動了一個單位.這個是三角形右下角的點.glEnd()函數告訴OpenGL已經完成畫點了.然后填充的三角形會被顯示.
glBegin(GL_TRIANGLES); // Drawing Using TrianglesglVertex3f( 0.0f, 1.0f, 0.0f); // TopglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glEnd(); // Finished Drawing The Triangle?
現在已經有一個三角形顯示在屏幕的左邊的,我們要在右邊顯示正方形.為了做這步,要再次調用glTranslate函數.這回是移動到右邊,所以X是正值.之前已經向左移動了1.5個單位,這回要向右移動1.5個單位.就是說先會到中間點,然后向右移動1.5個單位.所以總共需要向右移動3.0個單位.
glTranslatef(3.0f,0.0f,0.0f); // Move Right 3 Units?
現在來創建正方形.會用到GL_QUADS.四邊形顧名思義就是有4條邊的多邊形.四邊形屬性(GL_GUADS)最適合用來創建正方形.創建正方形的過程和創建三角形很像.就是用GL_GUADS代替GL_TRIANGLES,并且多了一組數值表示正方形的第4個點.我們會以左上,右上,右下,左下(順時針方向)的順序繪制.以順時針的順序繪制,正方形會被畫成一個背面.意思是,我們見到的四邊形的邊實際上是背面.逆時針繪制物體才是面向我們的.不過這些暫時不重要,這是遲點才需要注意的事.
glBegin(GL_QUADS); // Draw A QuadglVertex3f(-1.0f, 1.0f, 0.0f); // Top LeftglVertex3f( 1.0f, 1.0f, 0.0f); // Top RightglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom RightglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglEnd(); // Done Drawing The Quadreturn TRUE; // Keep Going }?
最后添加窗體/全屏模式的切換快捷鍵,順便加上窗體的標題.
記得還要改"//Create Our OpenGL Window"注釋那行的代碼中的標題.否則"全屏"窗體的標題會和"窗體模式"的標題不同.
if (keys[VK_F1]) // Is F1 Being Pressed? {keys[VK_F1]=FALSE; // If So Make Key FALSEKillGLWindow(); // Kill Our Current Windowfullscreen=!fullscreen; // Toggle Fullscreen / Windowed Mode// Recreate Our OpenGL Window ( Modified )if (!CreateGLWindow("NeHe's First Polygon Tutorial",640,480,16,fullscreen)){return 0; // Quit If Window Was Not Created } }?
轉載于:https://www.cnblogs.com/live41/p/3454290.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[译]NeHe教程 - 你的第一个多边形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从学生心理入手
- 下一篇: Mac OS X安装之虚拟机环境下的总结