3D Computer Grapihcs Using OpenGL - 04 First Triangle

來源:互聯網
上載者:User

標籤:width   att   back   函數   bind   記憶體   沒有   body   視窗   

本節將繪製一個三角形

先看最終代碼:

MyGlWindow.cpp:

 1 #include <gl\glew.h> 2 #include "MyGlWindow.h" 3   4 void MyGlWindow::initializeGL() 5 { 6     glewInit(); 7     Glfloat verts[]= 8     { 9         +0.0f, +1.0f,10         -1.0f, -1.0f,11         +1.0f, -1.0f,12     };13     GLuint myBufferID;14     glGenBuffers(1, &myBufferID);15     glBindBuffer(GL_ARRAY_BUFFER, myBufferID);16     glBufferData(GL_ARRAY_BUFFER, sizeof(vertes), verts, GL_STATIC_DRAW);17     glEnableVertexAttribArray(0);18     glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0);19 }20  21 void MyGlWindow::paintGL()22 {23     glViewport(0,0,width(),height());24     glDrawArrays(GL_TRIANGLES, 0, 3);  25 }

 

啟用通道

每個頂點都有多種attributes,例如位置,顏色等。

為了讓把資料從記憶體發送到顯卡中,我們需要告訴OpenGL去開啟某個attribute。

17 行使用glEnableVertexAttribArray()函數來啟用位置屬性,參數0表示預設的資料通道,位置。

 

資料描述

我們接著需要對資料進行描述,告訴OpenGL這串資料代表幾個頂點,每個頂點是幾個資料群組成。18行使用glVertexAttribPointer()函數達到這個目的。

第一個參數和前一行的函數參數表示同樣的意思,位置0,位置通道。

第二個參數表示每個元素由幾個資料群組成,因為我們使用了2個資料來表示x和y,所以這裡是2。

第三個參數表示資料類型是GL_FLOAT

第四個參數表示是否對資料進行Normalize,這裡不需要

第五個參數表示資料的Stride,即兩組資料間的跨度,有時不只有表示位置的資料,還有表示顏色等其他資訊的資料,那麼兩組同類型資料之間就有一些跨度。

第六個參數表示起始的位移,和第五個參數結合使用。

 

繪製

24 行使用glDrawArrays對數組進行繪製。

第一個參數表示繪製的圖元類型,這裡是三角形。

第二個參數表示第一個頂點的起始位置。

第三個參數表示繪製幾個頂點。

 

視窗自適應

OpenGL視窗沒有根據Qt視窗大小動態調整,所以添加第23 行來進行調整。

glViewPort()函數用來指定用視窗的哪個地區進行OpenGL繪製,四個參數分別表示左上方x,左上方y,繪製寬度,繪製高度。

這裡的width()和height()是Qt的函數。

 

3D Computer Grapihcs Using OpenGL - 04 First Triangle

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.