投影變換與視口變換

2021-09-06 00:22:12 字數 3162 閱讀 2874

一些說明:

0. 投影變換:描述如何指定視景體(viewing volume)的形狀和方向。視口變換:解釋如何控制三維模型座標到螢幕座標的變換。

1. 無論是透視投影還是平行投影(正交投影),只有在視景體中的物體才可見。

2. 下圖為opengl預設視點位置

(eyex,eyey,eyez) = (0.0,0.0,0.0); (upx,upy,upz) = (0.0,1.0,0.0) 指向z軸負半軸。

(也可通過glulookat來指定)

函式介紹:

視點設定

/* 該函式用於設定視點的位置,視點聚焦的位置,以及視點的向上方向 */

// 令: v1(centerx-eyex, centery-eyey, centerz-eyez)  v2(upx, upy, upz)

//      v3為v2在v1為法向量平面上的投影向量

// 如果向量v1與v2平行,則該視點將看不到任何物體。【要避免這種情況】

// v2並非是視點的向上方向,即也不是經過視口變換,投影到二維螢幕上影象的向上方向。

// 視點的向上方向為v3。

void glulookat( gldoubleeyex,gldoubleeyey,gldoubleeyez,

gldoublecenterx,gldoublecentery,gldoublecenterz,

gldoubleupx,gldoubleupy,gldoubleupz);

透視投影(相機模型)

/* 該函式用於建立對稱透視四稜臺視景體(該四稜臺視景體上下面為相似的長方形,兩長方形中心的連線為其高) */

// fovy為豎直方向的視角(單位°),範圍:(0,180),角度愈大,能看到的東西越多。為圖中的∠mon

//  aspect為寬高比pq/mn(為一正數)

//  znear為視點到近裁截面的距離oa(為一正數)

//  zfar為視點到遠裁截面的距離ob(為一正數  ob>oa)

void gluperspective( gldoublefovy,gldoubleaspect,gldoubleznear,gldoublezfar);

/* 該函式用於建立透視四稜臺視景體(該四稜臺視景體上下面為相似的長方形,但兩長方形中心的連線不一定為其高) */

// p(left, top) t(right, bottom) q(right, top) s(left, bottom)

//  znear為視點到近裁截面的距離(為一正數)

//  zfar為視點到遠裁截面的距離(為一正數  zfar>znear)

void glfrustum( gldoubleleft,gldoubleright,gldoublebottom,gldoubletop,gldoubleznear,gldoublezfar);

平行投影

/* 該函式用於建立平行投影視景體方盒 */

// p(left, top) t(right, bottom) q(right, top) s(left, bottom)

// near,far為正表示在視點的前方,為負表示在視點的後方(這並不是說在視點前方的就會被顯示,後方就不會顯示)

// 如:glulookat(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);  glortho(-10.0,10.0,-10.0,10.0,-7.0,9.0);

// auxwiresphere(8.0); 該網格球才能被完整地顯示(即整個球落在視景體之內)。

視口變換

/* 該函式用來指定進行視口變換時,螢幕原點和長寬值 */

void glviewport( glintx,glinty,glsizeiwidth,glsizeiheight);

OPENGL模型與投影變換

opengl中不設定模型,投影,視口,所繪製的幾何圖形的座標只能是 1到1 x軸向右,y軸向上,z軸垂直螢幕 產生目標場景的過程類似於用照相機進行拍照 1 把照相機固定在三角架上,並讓他對準場景 從不同位置觀察場景 檢視變換 2 對場景進行安排,使各個物體在 中的位置是我們所希望的 移動,旋轉或者放...

柵格重投影(投影變換)

openlayers能夠在不同的座標系統中顯示來自wms wmts 靜態影象和許多其他源的柵格資料。影象的地圖重投影直接發生在web瀏覽器中。在任何proj4js支援的座標參考系統中都是可視的,並且以前不相容的圖層現在可以組合和疊加。api的使用非常簡單。只需在ol view中指定正確的投影 例如使...

視錐和投影矩陣,視口變換

縮放與視域角有關 投影的過程就是xyz分量除以w的過程 可知投影在了z 1,的平面 上面的z是指乘以投影矩陣 剪裁矩陣 後的z 這裡設上面這個dip矩陣為a 經過計算可知 在近裁剪面的點 x,y,n,1 a x zoomx,y zoomy,0,n 投影後為 x zoomx n,y zoomy n,0...