2 簡單繪圖

來源:互聯網
上載者:User

/*******************************************************************************<br />數學上的點,只有位置,沒有大小。<br />一般情況下,OpenGL中的點將被畫成單個的像素(像素的概念,請自己搜尋之~),雖然它<br />可能足夠小,但並不會是無窮小。同一像素上,OpenGL可以繪製許多座標只有稍微不同的點,<br />但該像素的具體顏色將取決於OpenGL的實現。</p><p>數學上的直線沒有寬度,但OpenGL的直線則是有寬度的。同時,OpenGL的直線必須是有限長<br />度,而不是像數學概念那樣是無限的。</p><p>OpenGL規定,一個多邊形必須是一個“凸多邊形”(其定義為:多邊形內任意兩點所確定的<br />線段都在多邊形內,由此也可以推匯出,凸多邊形不能是空心的)。多邊形可以由其邊的端<br />點(這裡可稱為頂點)來確定。(注意:如果使用的多邊形不是凸多邊形,則最後輸出的效<br />果是未定義的——OpenGL為了效率,放寬了檢查,這可能導致顯示錯誤。要避免這個錯誤,<br />盡量使用三角形,因為三角形都是凸多邊形)</p><p>“點”是一切的基礎。<br />如何指定一個點呢?OpenGL提供了一系列函數。它們都以glVertex開頭,後面跟一個數字和<br />1~2個字母。例如:<br />glVertex2d<br />glVertex2f<br />glVertex3f<br />glVertex3fv<br />等等。<br />數字表示參數的個數,2表示有兩個參數,3表示三個,4表示四個(我知道有點羅嗦~)。<br />字母表示參數的類型,s表示16位整數(OpenGL中將這個類型定義為GLshort),<br /> i表示32位整數(OpenGL中將這個類型定義為GLint和GLsizei),<br /> f表示32位浮點數(OpenGL中將這個類型定義為GLfloat和GLclampf),<br /> d表示64位浮點數(OpenGL中將這個類型定義為GLdouble和GLclampd)。<br /> v表示傳遞的幾個參數將使用指標的方式,見下面的例子。<br />這些函數除了參數的類型和個數不同以外,功能是相同的。例如,以下五個程式碼片段的功能是<br />等效的:<br />(一)glVertex2i(1, 3);<br />(二)glVertex2f(1.0f, 3.0f);<br />(三)glVertex3f(1.0f, 3.0f, 0.0f);<br />(四)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);<br />(五)GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};<br /> glVertex3fv(VertexArr3);</p><p>OpenGL要求:指定頂點的命令必須包含在glBegin函數之後,glEnd函數之前(否則指定的頂<br />點將被忽略)。並由glBegin來指明如何使用這些點。<br />例如我寫:<br />glBegin(GL_POINTS);<br /> glVertex2f(0.0f, 0.0f);<br /> glVertex2f(0.5f, 0.0f);<br />glEnd();<br />則這兩個點將分別被畫出來。如果將GL_POINTS替換成GL_LINES,則兩個點將被認為是直線<br />的兩個端點,OpenGL將會畫出一條直線。<br />我們還可以指定更多的頂點,然後畫出更複雜的圖形。<br />另一方面,glBegin支援的方式除了GL_POINTS和GL_LINES,還有GL_LINE_STRIP,<br />GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN等</p><p> glBegin();<br />在這裡填上你所希望的模式<br />在這裡使用glVertex*系列函數<br />指定你所希望的頂點位置<br /> glEnd();<br />********************************************************************************/</p><p>#include <GL/glut.h> </p><p>#include <math.h></p><p>#pragma comment(linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) </p><p>const GLfloat factor = 0.1f; </p><p>void myDisplay(void)<br />{<br />GLfloat x;<br /> glClear(GL_COLOR_BUFFER_BIT);<br />glBegin(GL_POLYGON);<br /> glVertex2f(-1.0f, 0.0f);<br />glVertex2f(1.0f, 0.0f);<br />glVertex2f(0.0f, -1.0f);<br />glVertex2f(0.0f, 1.0f);<br />glEnd();</p><p>glBegin(GL_LINE_STRIP);<br /> for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)<br /> {<br /> glVertex2f(x*factor, sin(x)*factor);<br /> }<br /> glEnd();</p><p> glFlush();<br />} </p><p>int main(int argc, char *argv[])<br />{<br /> glutInit(&argc, argv);<br /> glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);<br /> glutInitWindowPosition(100, 100);<br /> glutInitWindowSize(400, 400);<br /> glutCreateWindow("第一個OpenGL程式");<br /> glutDisplayFunc(&myDisplay);<br /> glutMainLoop();<br /> return 0;<br />} </p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.