日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[译]NeHe教程 - 你的第一个多边形

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译]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教程 - 你的第一个多边形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。