電腦圖形學和OpenGL(二)座標系和繪製點線函數

來源:互聯網
上載者:User

標籤:opengl   圖形   gluortho2d   電腦圖形學   座標系   

這節開始前我們先瞭解一元的概念。圖形軟體包中用來描述各種圖形元素的函數稱為圖形輸出原語,也稱 圖元(primitive)。而描述對象幾何要素的輸出圖元一般稱為幾何圖元。點和線是最簡單的幾何圖元,本節就會簡單介紹點和線段的繪製方法。一、座標系統。座標系統一般分為 螢幕座標和OpenGL中的 繪圖座標。在上一節中我們簡單的寫了個樣本程式,程式中介紹了gluOrtho2D命令。我們可以利用該命令設定一個二維笛卡爾座標系。該函數的四個變數制定的是顯示圖形x和y座標範圍。所以我們可以使用下面代碼制定一個正交投影的二維座標系:
glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 800.0, 0.0, 600.0);

        在建立圖形的幾何描述時,所有OpenGL圖元的位置必須用gluOrtho2D函數定義的座標系統中的絕對座標給出。

       二、OpenGL畫點函數

       使用下面的函數可以指定一個點的位置和座標:

glVertex* ();
       這裡*號表示該函數需要有尾碼碼,這些尾碼碼用來指明空間的尺寸、座標值的資料類型和可能的向量形式座標描述。

       在上一節我們看到繪製圖形時使用如下代碼:

glBegin(GL_POINTS);glVertex2i(700, 15);glVertex2i(100, 555);glEnd();
       glBegin();函數用來指定要顯示的圖元類型,在繪製點的時候,圖元類型常量是:GL_POINTS,begin和end之間必須有glVertex*();函數。用於指定數值的資料類型的尾碼是:i(整數)、s(短整數)、f(浮點數)、d(雙精確度浮點數)。下面例子中我們繪製了三個點:

glBegin(GL_POINTS);glVertex2i(25, 25);glVertex2i(50, 50);glVertex2i(100, 100);glEnd();
       換一種方法,我們可以用矩陣來描述點:

int p1[]{25, 25};int p2[]{50, 50};int p3[]{100, 100};glBegin(GL_POINTS);glVertex2iv(p1);glVertex2iv(p2);glVertex2iv(p3);glEnd();
       最後,繪製點的完整代碼為:

#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <math.h>#include <iostream>#include <string>  #include <windows.h>#include <GL\glut.h>using namespace std;void piontSegment(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0.0, 0.0);//通過點繪製glBegin(GL_POINTS);glVertex2i(25, 25);glVertex2i(50, 50);glVertex2i(100, 100);glEnd();//通過矩陣繪製/*int p1[]{25, 25};int p2[]{50, 50};int p3[]{100, 100};glBegin(GL_POINTS);glVertex2iv(p1);glVertex2iv(p2);glVertex2iv(p3);glEnd();*/glFlush();}int _tmain(int argc, char **argv){glutInit(&argc, argv);//設定視窗的緩衝和顏色模型//下面指定的是:視窗使用單個緩衝並且使用RGB顏色模型來設定顏色值。glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//設定視窗左上方的位置glutInitWindowPosition(400, 200);//設定視窗的寬高glutInitWindowSize(800, 600);glutCreateWindow("Test OpenGL Program");//設定顯示視窗的背景為白色。參數順序為:紅、綠、藍、透明度。glClearColor(1.0, 1.0, 1.0, 0.0);//設定投影類型:正投影glMatrixMode(GL_PROJECTION);glLoadIdentity();//觀察參數:x座標值從0到200,y是從0到150gluOrtho2D(0.0, 800.0, 0.0, 600.0);glutDisplayFunc(piontSegment);glutMainLoop(); system("pause");return 0;}
       三、畫線函數

       上節我們就寫了個簡單的畫線函數GL_LINES,使用GL_LINES可以串連一對相鄰端點完成一條直線段,如果描述端點的座標只有一個則社麼都不會顯示,如果端點數為奇數那麼最後一個點將被捨棄。如下代碼:

glBegin(GL_LINES);glVertex2i(700, 15);glVertex2i(100, 555);glVertex2i(50, 150);glVertex2i(400, 500);glVertex2i(10, 400);glEnd();
       最後一個點(80,400)將會被捨棄,輸出的圖形將會如下:


       使用OpenGL的圖元常量GL_LINE_STRIP時,我們可以獲得折線,即會按照端點順序進行串連,直到最後一個端點,代碼如下:

glBegin(GL_LINE_STRIP);glVertex2i(700, 15);glVertex2i(100, 555);glVertex2i(50, 150);glVertex2i(400, 500);glVertex2i(10, 400);glEnd();
       繪製的圖形如下:



       接著是最後一個常量參數:GL_LINE_LOOP和上一個不同點就是它會把最後一個點和第一個點相連,組成一個迴圈,代碼:

glBegin(GL_LINE_LOOP);glVertex2i(700, 15);glVertex2i(100, 555);glVertex2i(50, 150);glVertex2i(400, 500);glVertex2i(10, 400);glEnd();
       產生的圖形如下:



       這樣點和線我們都能繪製了,下節我們將會介紹一下畫線演算法

參考內容:《電腦圖形學(第三版)》 電子工業出版社

轉載請標明出處:http://blog.csdn.net/letthinking/article/details/39161019

電腦圖形學和OpenGL(二)座標系和繪製點線函數

相關文章

聯繫我們

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