glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 800.0, 0.0, 600.0);
在創建圖形的幾何描述時,全部OpenGL圖元的位置必須用gluOrtho2D函數定義的座標系統中的絕對座標給出。ios
2、OpenGL畫點函數算法
使用下面的函數能夠指定一個點的位置和座標:windows
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到150 gluOrtho2D(0.0, 800.0, 0.0, 600.0); glutDisplayFunc(piontSegment); glutMainLoop(); system("pause"); return 0; }3、畫線函數
上節咱們就寫了個簡單的畫線函數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時,咱們能夠得到折線,即會按照端點順序進行鏈接,直到最後一個端點,代碼以下:oop
glBegin(GL_LINE_STRIP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();繪製的圖形以下:
接着是最後一個常量參數:GL_LINE_LOOP和上一個不一樣點就是它會把最後一個點和第一個點相連,組成一個循環,代碼:spa
glBegin(GL_LINE_LOOP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();生成的圖形以下:
這樣點和線咱們都能繪製了,下節咱們將會介紹一下畫線算法。.net
參考內容:《計算機圖形學(第三版)》 電子工業出版社
code
轉載請標明出處:http://blog.csdn.net/letthinking/article/details/39161019對象