1. 程式人生 > >計算機圖形學入門

計算機圖形學入門

這幾天需要用OpenGL做一個小程式,之前沒有計算機圖形學和OpenGL的基礎,以為很簡單(事實上確實不難),但是在自己摸索的過程中卻走了一些彎路。現在稍微總結一下。

1 座標系統

從定義一個零件的幾何外形到圖形裝置上生成相應的圖形,需要建立相應的座標系統來描述,並通過座標變換來實現圖形的表達。有幾個座標系需要了解一下。

1. 1 世界座標系(world coordinate system)

或者把它叫做場景座標系吧,是一個三維座標系,多用右手直角座標系,用來描述物體所處的場景空間。座標原點在螢幕中心,Z軸垂直於螢幕指向螢幕外,y軸豎直向上,x軸水平向右。

1.2 物體本地座標

用來定義某個實體本身的座標系。例如,stl檔案中包含了構成實體模型的三角面片的頂點座標,這裡的頂點座標值就是在物體本地座標系下的座標值。

1.3 裝置座標系(device coordinate system)

也稱為物理座標系,是一個二維座標系,與圖形輸出裝置相關聯,用來表示三維模型投影后生成的二維圖形顯示在圖形輸出器(例如顯示器)的座標系。單位是象素(對於顯示器來說)。

1.4 規格化裝置座標系(normalized device coordinate system)

這是一個人為規定的假象裝置座標系,與裝置無關,目的是為了方便將圖形軟體應用到不同解析度的裝置。該座標系的座標軸方向以及原點與裝置座標系相同,但是它最大的座標範圍是1.
首先將輸出圖形轉換為規格化裝置座標系,當轉換到具體的不同輸出裝置時,只需要將圖形的規格化座標系再乘以相應裝置解析度即可,這樣使圖形軟體與圖形裝置分離開來,增加了圖形軟體的可移植性。

2 投影(projection)和視景體(viewing volume)

我們在3D座標系統定義模型,但是我們在螢幕上顯示模型時只能使用二維座標系,從三維座標轉換到二維座標,這裡就需要用到投影。我們可以用正投影(orthographic projection)或者透視投影(perspective projection)。關於這兩個投影的性質就不講了,網上很多。

2.1 視景體

我個人覺得這是很重要的一個概念,簡單地來說,視景體就是三維空間中的一個封閉區域。在這個區域內的模型才能被顯示在螢幕上,在這個區域外的部分會被裁剪掉,不會顯示在螢幕上。視景體的大小範圍是可以設定的,具體方法就是用上面的兩種投影。

2.2 通過正投影設定的視景體

正投影設定的視景體是一個長方體,我們通過設定視景體xyz軸最大最小座標來定義它。在OpenGL中可以用
GLFrustum::SetOrthographic(GLfloat xMin,GLfloat xMax,GLfloat yMin,GLfloat yMax,GLfloat zMin,GLfloat zMax)來定義,也可以用glOrtho(left, right, bottom, top, near, far)來定義。
在正投影中,觀察者的位置假定在z軸正無窮處。

2.3 通過透視投影設定的視景體

透視投影設定的視景體是一個平截頭體(frustum),它的形狀是一個金字塔被截去塔尖之後的形狀。

frustum的形狀及引數
frustum在座標系中的位置

圖片來源於網路,原網址是http://jerome.jouvie.free.fr/opengl-tutorials/Lesson1.php#ClippingPlane
在OpenGL中我們可以用GLFrustum::setPerspective(float fFov,float fAspect, float fNear,float fFar)或者gluPerspective(fovy, aspect, near, far)來定義。
在透視投影中,觀察者的位置預設在座標原點(0,0,0),從z軸正向看向z軸負向。為了我們的模型落在視景體內,我們還需要經過一些變換。

3 變換

3.1 點的齊次座標表示

齊次座標是將一個n維空間的點用n+1維的向量來表示,即附加了一個座標。也就是說,我們使用一個四維行向量(或者說1X4的矩陣)[x,y,z,w]來表示三維空間中的一個點(x,y,z)。採用齊次座標系的優點:(1)為幾何圖形的二維、三維甚至更高維空間的座標變換提供統一的矩陣運算方法。(2)處理無窮遠點比較方便。

3.2 圖形變換

變換矩陣
為了將一個模型放到一個場景中,擺在某一個位置,朝著某個方向,這就要將模型在本地座標系下的值轉換到場景座標系下的值,我們用矩陣運算來實現這一點。一個變換矩陣表示了場景空間中的一個特定位置,以及相對於視覺座標系的3個軸上的方向。
一個4X4變換矩陣的第一個列向量表示本地座標系x軸在場景座標系中的方向,第二個列向量表示本地座標系y軸在場景座標系中的方向,第三個表示z軸在場景座標系中的方向,第四列表示本地座標系的原點在場景座標系下的位置。也就是說,通過變換矩陣運算,我們把本地座標系的原點放在了場景座標系中的一個點,把本地座標系的xyz軸對準了某個方向,這樣就在場景中擺放好了我們的模型。
拿二維舉例來說:
這裡寫圖片描述
上面這個矩陣將物體座標系原點放到場景座標系的(2,2)處,物體座標系的x軸朝著(1,0)方向,y軸朝著(0,-1)方向。物體本地座標系下的(1,1)點在場景座標系下的座標點為(3,1),畫個座標圖的話一目瞭然。

相關推薦

計算機圖形入門

這幾天需要用OpenGL做一個小程式,之前沒有計算機圖形學和OpenGL的基礎,以為很簡單(事實上確實不難),但是在自己摸索的過程中卻走了一些彎路。現在稍微總結一下。 1 座標系統 從定義一個零件的幾何外形到圖形裝置上生成相應的圖形,需要建立相應的座標

用JavaScript玩轉計算機圖形(一)光線追蹤入門

系列簡介 記得小時候讀過一本關於計算機圖形學(computer graphics, CG)的入門書,從此就愛上了CG。本系列希望,採用很多人認識的JavaScript語言去分享CG,令更多人有機會接觸,並愛上CG。 本系列的特點之一,是讀者能在瀏覽

【3D計算機圖形】變換矩陣、歐拉角、四元數

遭遇 unit 額外 star 應該 detail 導致 print uic 【3D計算機圖形學】變換矩陣、歐拉角、四元數 旋轉矩陣、歐拉角、四元數主要用於:向量的旋轉、坐標系之間的轉換、角位移計算、方位的平滑插值計算。 一、變換矩陣: 首先要區分旋轉矩陣和變換矩陣:

[計算機圖形 with OpenGL] Chapter10 OpenGL三維觀察程序示例

chap 而不是 max argv func open position style windows   10.10節書中給出了一個程序示例,有一個填充正方形,從側面的角度觀察並畫到屏幕上。   圖0   這裏進一步畫出一個立方體,將相機放入立方體中心,旋轉相機,達到在

計算機圖形(一) 視頻顯示設備_1_CRT原理

http color size 安裝 ref p s 這一 計算機圖形學 指定 第 1 章 圖形系統概述 如今。計算機圖形學的作用與應用已經得到了廣泛承認。大量的圖形硬件和軟件系統已經應用 到了差點兒全部的領域。通用計算機甚至很多手持計算器也已經

MFC計算機圖形(2)

mct tid spc DdGzS cin html uem ubd dcs sdsdzi狗聘毫渤口毫http://huiyi.docin.com/hnbkw203d1e5gw濫良瘟侍探蝗http://weibo.com/p/10050563731520645atr4g回救

計算機圖形-圖形幾何變換

red test position glbegin mage += logs depth window 內容:金字塔的平移以及旋轉的實現,通過鼠標控制金字塔的轉速以及運行窗口的退出 #include <GL/glut.h> #include <stdli

計算機圖形(二)輸出圖元_3_畫線算法_2_DDA算法

通過 程序 之間 tro 取整 xen git 方程 class DDA算法? ? ? ? 數字微分分析儀(digital differential analyzer, DDA)方法是一種線段掃描轉換算法。基於使用等式(3

計算機圖形(第2版 於萬波 於碩 編著)第45頁的Bresenham算法有錯誤

str mage mov 步長 分享圖片 圖片 方法總結 tro 計算 計算機圖形學(第2版 於萬波 於碩 編著)第45頁的Bresenham算法有錯誤: 書上本來要寫的是以x為階越步長的方法,但是他寫的是用一部分y為階越步長的方法(其實也寫的不對),最後以x為階越

計算機圖形-mac系統下Xcode中OpenGL開發環境配置。

配置步驟 ctf 註意 posit 圖片 pen ret open 方式 mac系統下Xcode中OpenGL開發環境配置。 這學期有計算機圖形學的課程,需要用到OpenGL,最近著手開始配置開發環境了,老師上課給的安裝包都是基於windows系統的。網上也是window

CS184.1X 計算機圖形導論 第7講 V1-3 學習筆記

線上 物體 創建 strong 公式推導 導論 幾何 ng- 解決方法 L7V1:OPENGL 著色:學習動機 1.光照的重要性 1)能夠真正顯示出形狀感知的外觀; 2)準確的著色和光照對對傳達物體的形狀非常重要; 3)著色的方式也十分重要:平面著色(GL_FLAT)、平滑

計算機圖形(三種畫線算法)

直線 情況 算法 n) src 隨著 多邊形 取整 兩個 第二章:光柵圖形學算法 1、光柵顯示器:光柵掃描式圖形顯示器簡稱光柵顯示器,是畫點設備,可看作是一個點陣單元發生器,並可控制每個點陣單元的亮度 2、由來:隨著光柵顯示器的出現,為了在計算機上處理、顯示圖形,需要發展一

讀書筆記——計算機圖形基礎(OpenGL版)第一章

mat 線框 設備 框圖 展示 關系 模型 設計 pan 第一章緒論 本章主要內容 : 計算機圖形學的目標和任務計算機圖形學的內容體系計算機圖形學的相關學科計算機圖形學的應用領域計算機圖形學的發展 一、CG的目標 核心目標:視覺交流,通過圖形或幾何的方式來表示或展示

計算機圖形--貝塞爾曲線

(n+1)個控制點可以定義一條n次貝塞爾曲線 如下圖,P1、P2、P3三個點可以定義一條二次貝塞爾曲線。 對於貝塞爾曲線的原理,我們先不去解釋,先說明如何應用。 常見的應用是:給出一系列的控制點,要求擬合出一條貝塞爾曲線。 =====================================

計算機圖形--貝塞爾曲線2

貝塞爾曲線的性質有哪些?有什麼的特殊的地方呢? 書本上列舉了很多點: 1.端點性質:    曲線的起點和終點就是特徵多邊形的第一個頂點和最後一個頂點。    曲線的起點和終點處分別和特徵多邊形的第一條邊和最後一條邊相切。 2.對稱性:   &n

計算機圖形】圖元的區域填充之多邊形的區域填充

相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 多邊形的區域填充 首先,我們瞭解一下多邊形。 多邊形可以簡單地分為凸多邊形和凹多邊形,除此之外,我們還要討論內含環的多邊形,如下圖。 多邊形的表示方法 頂點表示:用多邊形頂點的序列來刻畫多邊形。直觀、幾何

計算機圖形】圖元的區域填充之矩形的區域填充

相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 矩形的區域填充 前提 矩形的頂點座標均為整數。 我們簡單地實現一下,思路是在矩形內逐行逐列點亮每個畫素,如圖。 typedef struct{ int xmin, xmax; int ymin,

計算機圖形(OpengGl版) 實驗(一)

結果展示: #include <windows.h> #include <GL/glut.h> #include <stdlib.h> #include <bits/stdc++.h> using namespace std; vo

計算機圖形計算機圖形中的座標系統

一、簡介   馬三最近開始學習計算機圖形學了,買了兩本書,其中一本是國內的,還是什麼大學的教材,不過寫得真不咋樣啊。另外一本是大名鼎鼎的《計算機圖形學》第四版。最近接觸了下計算機圖形學中的座標系統,做個筆記。 二、計算機圖形學中的座標系統 1.建模座標系(MC)   建模座標系是一個區域性座標系,同時

計算機圖形導論

一.計算機圖形學概念 1.1什麼是計算機圖形學?(Computer Graphics) 關於計算機圖形學的定義眾說紛紜。 IEEE 對計算機圖形學的定義為:Computer graphicsis the art or science of producing graphical imag