1. 程式人生 > >計算機圖形學之畫基本圖形(1)

計算機圖形學之畫基本圖形(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;
}

執行結果:


注意main函式中的各語句,除了最後的return之外,其餘全部以glut開頭。這種以glut開頭的函式都是GLUT工具包所提供的函式,下面對用到的幾個函式進行介紹。
1
glutInit,對GLUT進行初始化,這個函式必須在其它的GLUT使用之前呼叫一次。其格式比較死板,一般照抄這句glutInit(&argc, argv)就可以了。
2
glutInitDisplayMode,設定顯示方式,其中GLUT_RGB表示使用RGB顏色,與之對應的還有GLUT_INDEX(表示使用索引顏色)。GLUT_SINGLE表示使用單緩衝,與之對應的還有GLUT_DOUBLE(使用雙緩衝)。更多資訊,請自己
Google。當然以後的教程也會有一些講解。
3
glutInitWindowPosition,這個簡單,設定視窗在螢幕中的位置。
4
glutInitWindowSize,這個也簡單,設定視窗的大小。
5
glutCreateWindow,根據前面設定的資訊建立視窗。引數將被作為視窗的標題。注意:視窗被建立後,並不立即顯示到螢幕上。需要呼叫glutMainLoop才能看到視窗。
6
glutDisplayFunc,設定一個函式,當需要進行畫圖時,這個函式就會被呼叫。(這個說法不夠準確,但準確的說法可能初學者不太好理解,暫時這樣說吧)。
7
glutMainLoop,進行一個訊息迴圈。(這個可能初學者也不太明白,現在只需要知道這個函式可以顯示視窗,並且等待視窗關閉後才會返回,這就足夠了。)
glutDisplayFunc函式中,我們設定了當需要畫圖時,請呼叫myDisplay函式。於是myDisplay函式就用來畫圖。觀察myDisplay中的三個函式呼叫,發現它們都以gl開頭。這種以gl開頭的函式都是OpenGL的標準函式,下面對用到的函式進行介紹。
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

java8lambda表達式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關鍵字宣告 抽象方法只需要宣告不用實現

hadoophdfs基本原理

一 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 QuickStackView具體解釋1

left 記錄 內部 變化 原創 focus filo 郵箱 sta Qt Quick中有個StackView。我在《Qt Quick核心編程》一書中沒有講到。近期有人問起,趁機學習了一下,把它的基本使用方法記錄下來。 我準備分兩次來講。第一次講主要的