3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

來源:互聯網
上載者:User

標籤:class   旋轉   ima   project   需要   png   orm   oat   ogr   

如果我們需要繪製兩個(或者多個)一樣的立方體(或者物體),只是位置、縮放、旋轉不一樣,那麼我們可以不需要多次將這個物體的頂點資訊、顏色資訊等發送到顯卡,而是發送一次,繪製多次,僅僅是每次繪製之前應用不同的轉換矩陣。這種方法叫做OpenGL Instancing。它的效率比每次都重新發送一次資料到顯卡要高很多。

看具體代碼:

 1 void MyGlWindow::paintGL() 2 { 3     glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 4     glViewport(0, 0, width(), height()); 5  6     //cube1 7     glm::mat4 projectionMatrix = glm::perspective(30.0f, ((float)width()) / height(), 0.1f, 10.0f); 8     glm::mat4 translationMatrix = glm::translate(projectionMatrix, glm::vec3(0.0f, 0.0f,-3.0f)); 9     glm::mat4 fullTransformMatrix = glm::rotate(translationMatrix, 54.0f, glm::vec3(1.0f, 0.0f, 0.0f));10 11     GLint fullTransformMatrixUniformLocation = glGetUniformLocation(programID, "fullTransformMatrix");12     glUniformMatrix4fv(fullTransformMatrixUniformLocation, 1, GL_FALSE, &fullTransformMatrix[0][0]);13     glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);14 15     //cube216     translationMatrix = glm::translate(projectionMatrix, glm::vec3(2.0f, 0.0f, -4.0f));17     fullTransformMatrix = glm::rotate(translationMatrix, 126.0f, glm::vec3(0.0f, 1.0f, 0.0f));18     glUniformMatrix4fv(fullTransformMatrixUniformLocation, 1, GL_FALSE, &fullTransformMatrix[0][0]);19     glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);20 21 }

我們僅在paintGL()函數中增加了幾行代碼(16-19行),就可以繪製另外一個立方體。

我們在16-17行重新改變了translationMatrix和fullTransformMatrix轉換矩陣(我們甚至都沒有定義新的矩陣,而僅僅是改變其數值),重新改變了位置、旋轉。projection 矩陣我們並不想改變,還是之前的設定。

第18行和12行完全一樣,但是這是必須的,因為要重新應用這個uniform變數才能起作用。

第19行使用了新的變換矩陣對立方體進行了第二次繪製。編譯運行我們得到以下效果:

3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

相關文章

聯繫我們

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