標籤: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(二)座標系和繪製點線函數