計算機圖形學之畫基本圖形(1)
第一次實驗:理解語句
#include<GL/glut.h> #include<math.h> int i; const int n=1000; const GLfloat R=0.5f; const GLfloat Pi=3.1415926536f; void myDisplay(void) { glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); //畫正方形 glColor3f(1.0f,1.0f,1.0f); glRectf(-0.5f,-0.5f,0.5f,0.5f); // 畫三角形 glBegin(GL_TRIANGLES);//glBegin()和glEnd()函式之間呼叫函式完成點、線、和多邊形的繪製。</span> glColor3f(1.0f,0.0f,0.0f);glVertex2f(0.0f,1.0f); glColor3f(0.0f,1.0f,0.0f);glVertex2f(0.8f,-0.5f); glColor3f(0.0f,0.0f,1.0f);glVertex2f(-0.8f,-0.5f); glEnd(); //圓 glColor3f(1.0f, 0.0f, 1.0f); glBegin(GL_POLYGON); for(i=0; i<n; ++i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)); glEnd(); //五角星 glColor3f (0.0f, 0.0f, 1.0f); GLfloat a = 1 / (2-2*cos(72*Pi/180)); GLfloat bx = a * cos(18 * Pi/180); GLfloat by = a * sin(18 * Pi/180); GLfloat cy = -a * cos(18 * Pi/180); GLfloat PointA[2] = { 0, a }, PointB[2] = { bx, by }, PointC[2] = { 0.5, cy }, PointD[2] = { -0.5, cy }, PointE[2] = { -bx, by }; glBegin(GL_LINE_LOOP); glVertex2fv(PointA); glVertex2fv(PointC); glVertex2fv(PointE); glVertex2fv(PointB); glVertex2fv(PointD); glEnd(); //點 glPointSize(3); glBegin(GL_POINTS); glColor3f(1.0f,0.0f,0.0f);glVertex2f(-0.6f,0.6f); glColor3f(0.0f,1.0f,0.0f);glVertex2f(0.6f,-0.0f); glColor3f(0.0f,0.0f,1.0f);glVertex2f(-0.6f,-0.6f); glEnd(); glFlush();//函式啟動OpenGL繪圖命令的執行,並將圖形光柵化後輸出在裝置上。</span> } int main(int argc,char *argv[])//注意 { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("Hello world!"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; }
執行結果:
1、glutInit,對GLUT進行初始化,這個函式必須在其它的GLUT使用之前呼叫一次。其格式比較死板,一般照抄這句glutInit(&argc, argv)就可以了。
2、glutInitDisplayMode,設定顯示方式,其中GLUT_RGB表示使用RGB顏色,與之對應的還有GLUT_INDEX(表示使用索引顏色)。GLUT_SINGLE表示使用單緩衝,與之對應的還有GLUT_DOUBLE(使用雙緩衝)。更多資訊,請自己
3、glutInitWindowPosition,這個簡單,設定視窗在螢幕中的位置。
4、glutInitWindowSize,這個也簡單,設定視窗的大小。
5、glutCreateWindow,根據前面設定的資訊建立視窗。引數將被作為視窗的標題。注意:視窗被建立後,並不立即顯示到螢幕上。需要呼叫glutMainLoop才能看到視窗。
6、glutDisplayFunc,設定一個函式,當需要進行畫圖時,這個函式就會被呼叫。(這個說法不夠準確,但準確的說法可能初學者不太好理解,暫時這樣說吧)。
7、glutMainLoop,進行一個訊息迴圈。(這個可能初學者也不太明白,現在只需要知道這個函式可以顯示視窗,並且等待視窗關閉後才會返回,這就足夠了。)
1、glClear,清除。GL_COLOR_BUFFER_BIT表示清除顏色,glClear函式還可以清除其它的東西,但這裡不作介紹。
2、glRectf,畫一個矩形。四個引數分別表示了位於對角線上的兩個點的橫、縱座標。
3、glFlush,保證前面的OpenGL命令立即執行(而不是讓它們在緩衝區中等待)。其作用跟fflush(stdout)類似。
相關推薦
計算機圖形學之畫基本圖形(1)
第一次實驗:理解語句 #include<GL/glut.h> #include<math.h> int i; const int n=1000; const GLfloat R=0.5f; const GLfloat Pi=3.1415926536
基於libevent的http協議 學習筆記之認識基本函式(1)
1. evhttp_new 宣告: struct evhttp *evhttp_new(struct event_base *base); 用途:用於建立一個新的HTTP server, 引數: base(可選)用來接收http事件, (注:可選是什麼意思暫時不清楚,歡迎
計算機圖形學之畫線(DDA、Bresenham、中點畫線) 針對各種斜率
為什麼寫這篇文章? 博主開始也是到處參考研究了很多程式碼,發現要考慮任意斜率的話,很多程式碼都是用if語句來分別討論的,其實其中有很多重複的程式碼部分,我覺得不程式碼不簡潔,就到處查詢參考思考才總結出一些比較簡潔的程式碼,希望大家喜歡,也期待大家有
計算機圖形學 ———— 掃描線多邊形填充演算法 (講解)
一.基本原理 掃描線多邊形區域填充演算法是按掃描線順序(由下到上),計算掃描線與多邊形的相交區間,再用要求的顏色顯示這些區間的象素,即完成填充工作。 &n
java8之lambda表達式(1)-基本語法
com nal called new collect starting 代碼 face 使用 參考:http://www.cnblogs.com/andywithu/p/7344507.html lambda表達式,即帶有參數的表達式,為更清晰地理解lambda表達式,先看
JavaScript總結之DOM基本操作(三)
DOM(Document Object Model),即文件物件模型。當我們建立了一個網頁並把它載入到Web瀏覽器上,DOM就在幕後悄然而生,因為它把你所編寫的網頁文件轉換為一個文件物件。 我們可以這麼理解DOM,把DOM看做一棵節點樹,主要由元素節點、屬性節點、文字節點三種節點構成。例如下方的一行
java環境安裝與計算機基本命令(1)
JDK安裝與計算機基本結構和命令 計算機的基本結構(蘿莉囉嗦) 基本的計算機命令 JDK下載 安裝 java舉例 計算機的基本結構(蘿莉囉嗦) 工具XMind下載(收費軟體你懂的) 基本的
ES6 Generator函式之基本用法(1)
Generator函式之基本用法 (1)基本概念 Generator函式是ES6 提供的一種非同步程式設計解決方案,語法與傳統函式完全不同。 Generator函式與普通函式在寫法上的不同 1.function命令與函式名之間有一個星號(*)。 2.函式體內部使用yield語
複習之JavaScript基本語法(一)——三種引入方式及load、write事件
JavaScript是什麼 JavaScript一種直譯式指令碼語言,是一種動態型別、弱型別、基於原型的語言,內建支援型別。它的直譯器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的指令碼語言。 JavaScript的作用 JavaScript
複習之JavaScript基本語法(三)——getElement[...]方法使用
JavaScript核心document.getElementById() document.getElementById()是根據id獲取標籤物件 //獲取標籤物件的值 //文字域和文字框都用value取值 document.getElementById("u
複習之JavaScript基本語法(五)——資料型別、json、date()、math()、迴圈函式
JavaScript資料型別 JavaScript是一個弱型別的語言,變數通過var生成沒有型別,但給它賦值有型別。 字串、數字、布林、陣列、物件、Null、Undefined Undefined代表變數沒有賦值。 數字型別包括整數和小數 布林型別:數字的話等
複習之JavaScript基本語法(六)——事件監聽總彙
事件監聽 簡單事件監聽 btn.onclick 點選事件 <div class="box" id="box"> <H1> 測試模組</H1> <H1> 測試模組</H1> <
linux學習筆記之常用基本命令(一)
1.幫助命令 man獲取幫助資訊 語法:man[命令或配置檔案] help獲得shell內建命令的幫助資訊 語法:help 命令 例: help cd 常用快捷鍵 ctrl +c: 停止程序 ctrl +l: 清屏 ctrl +q: 退出 tab鍵 :補全命令(常用t
Java學習筆記之抽象類基本概念(1)
1、基本概念 抽象類:包含一個抽象方法的類 抽象方法:用abstract關鍵字宣告,且只有方法名沒有方法體的方法。 1.1 抽象類的定義和使用規則 包含了一個抽象方法的類必須是抽象類 抽象類和抽象方法都要用abstract關鍵字宣告 抽象方法只需要宣告不用實現
hadoop之hdfs基本原理(二)
一 HDFS基本概念 hdfs檔案被分成塊進行儲存,預設64M,塊是檔案儲存處理的邏輯單元 hdfs有兩個節點,NameNode和DataNode NameNode存放檔案元資料:分別是檔案與資料塊的對映表,資料塊與資料節點的對映表。配置副本策略和處理客戶
java學習筆記圖形程式設計及GUI應用小結(1)
Swing介紹 Swing是不對等基於GUI工具箱的正式名字。它已是Java基礎類庫(Java Foundation Class)JFC的一部分了。Swing沒有完全替代AWT,而是基於AWT架構之上。Swing是指“被繪製的”使用者介面類;AWT是指像事件處理這樣的視
Nginx之常用基本配置(一)
上一篇部落格我們大概介紹了一下nginx,nginx的架構,nginx編譯安裝和nginx命令的用法,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12366808.html;今天我們來配置簡單的配置下nginx和一些簡單指令說明。 nginx和httpd類似都
Nginx之常用基本配置(二)
上一篇我們把nginx的主配置檔案結構大概介紹了下,全域性配置段比較常用的指令說了一下,http配置段關於http伺服器配置指令介紹了下,以及有幾個調優的指令,server_name的匹配機制,錯誤頁面自定義,location匹配機制以及root定義資源路徑和alias定義資源路徑的不同,更多的指令和詳細
Nginx之常用基本配置(三)
前面我們聊了下了Nginx作為WEB伺服器對客戶端請求相關配置,檔案操作優化、Nginx訪問控制、basic驗證,、狀態模組狀態頁、gzip壓縮配置;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12381331.html;今天我們來聊一聊日誌模組、ssl模組、re
Qt Quick之StackView具體解釋(1)
left 記錄 內部 變化 原創 focus filo 郵箱 sta Qt Quick中有個StackView。我在《Qt Quick核心編程》一書中沒有講到。近期有人問起,趁機學習了一下,把它的基本使用方法記錄下來。 我準備分兩次來講。第一次講主要的