沖孔板網加工沖孔廠
沖孔板網加工沖孔廠關鍵詞:三角形沖孔網
標題:OpenGL + Qt: 0 - 三角形繪制
來源:知乎
文章內容: 今天開一個大坑,我將寫一系列關于 OpenGL + Qt 編程的入門教程,內容包括 OpenGL 的 Shading Language (現代 OpenGL,9102年都要結束了,不要再用glBegin/glEnd啦!)以及如何通過 Qt 做用戶沖孔板網加工沖孔廠交互來配合OpenGL。雖然 OpenGL 和 Qt 的中文教程、文檔、資源都是很豐富的,但是使用 Qt 寫 OpenGL 程序卻幾乎沒有,甚至連英文文檔都相當少,這個系列算是我自己試錯的一些經驗總結,給有興趣的小伙伴看看。
本系列不假設讀者有任何 OpenGL 或者 Qt 或者圖形學的基礎知識,但是要求讀者了解基本的 C++ 語法。所有相關的圖形學、Qt、OpenGL 的內容都會單獨介紹。
為什么用 Qt 寫 OpenGL
OpenGL 本身雖然是一個圖形庫,但是它只負責產生絢麗的圖形效果,并不管理用戶界面本身,也不與操作系統打交道接受用戶的輸入,而是依靠其他圖形界面庫的幫助。
目前能找到的 OpenGL 教程大部分是使用一些為 OpenGL 打造的工具庫(如 GLUT、glfw 這些),這些庫雖然對于發揮 OpenGL 本身的特性都很方便,但是在如果要搭建完整的應用,卻十分捉襟見肘。另一方面在 Windows 上安裝這些工具庫都異常復雜,需要用 CMake + Visual Studio 沖孔板網加工沖孔廠一頓操作,往往安裝就把人嚇退了,而 Linux 又會因為顯卡驅動的問題,做這種和顯卡高度相關的事情會很麻煩。
而 Qt 作為**成熟的跨平臺 GUI 庫之一,有大量的子模塊完成各種交互、多媒體處理、網絡等等完整應用所必須的功能,而且其開發的程序幾乎可以無縫在不同的操作系統上運行,也有非常簡單的安裝程序和完善的文檔。對于開發 OpenGL 程序來說更重要的是,從 Qt 5 開始,OpenGL 不再是單獨的模塊,而是融入了 Qt 核心包中,在 qmake 的加持下,幾乎無需額外配置就能使用。如果使用 Qt 專用的 IDE QtCre沖孔板網加工沖孔廠ator,可以一鍵編譯運行,極大提高開發體驗。
話不多說,我們從**基本的繪圖開始吧!本節所有代碼公開于Github上,鏈接linmx0130/QGLDemo。
搭建腳手架
首先強烈推薦去 Qt 主頁下載**新版的 Qt 工具包,由于只是學習目的,我們可以在安裝的時候直接選擇以開源協議安裝。**后因為 Qt 使用了 LGPL 協議,所以如果只是動態鏈接也可以在商業程序中使用 Qt。
安裝好完整的 Qt 開發環境后,我們直接打開 Qt Creator,選擇創建一個Qt Widgets Application,這是**基本**傳統的基于 C++ 的 Qt 程序。
然后會要求選擇創建項目路徑和名稱、選擇的工具鏈等等,這些都可以隨意選擇,但是在接下來 Details 項中,要十分小心,我們需要去掉“創建界面”的勾選,這樣就不會生成界面文件,可以完全由代碼操控界面。
然后一個基本的 Qt GUI 工程就搭建完成了,是時候開始繪圖了!
QWidget 和 QOpenGLWidget
在開始編程之前,我們先需要搞清楚 QWidget 和 QOpenGLWidget 這兩個類。在 Qt 中,一切用戶界面中的對象,不論是窗口、輸入框、按鈕還是其他各種控件,都是 QWidget 的子類。有些 QWidget 可以承載其他 QWidget,并通過各種 Layout 管理子組件的排放,從而構成豐富且有序的界面。一般而言,如果我們需要設計一個窗口或者自己的小控件,就需要繼承 QWidget 類并填充其他控件或者直接繪圖。
QWidget 是一個 QObject,這是 Qt 自建的一種 C++ 語法擴展,不僅僅有基本的成員變量和成員函數,還有信號(signal)和槽(slot),在 Qt 中,一些事件發生后會產生信號,而連接到這個信號上的槽函數則會被調用用于處理這個信號。我們自己設計的控件也可以觸發信號,從而讓控件的使用者接收并處理這些信號。但是在這一節中我們不會遇到它們。
不過本節我們會繼承 QOpenGLWidget 類。它是 QWidget 的子類,并且攜帶了調用 OpenGL 所必須的一些函數和對象,也給出了幾個用于重載的方法便于繪圖,因此我們直接使用它來完成基本的繪圖操作。
繼承QOpenGLWidget
在這一篇中我們只寫一個 QOpenGLWidget 來繪圖,然后放置到默認生成的主窗口 MainWindow 中展示,所以首先我們需要繼承 QOpenGLWidget 來進行繪圖。我們可以直接用 Qt Creator 添加一個新類,起名為 PaintingWidget 這樣會自動生成好頭文件和實現文件,生成的時候直接選擇以 QOpenGLWidget 為基類。在頭文件中我們進行如下聲明:
#include



