一些說明:
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( gldouble
fovy,gldoubleaspect,gldoubleznear,gldoublezfar);
/* 該函式用於建立透視四稜臺視景體(該四稜臺視景體上下面為相似的長方形,但兩長方形中心的連線不一定為其高) */
// p(left, top) t(right, bottom) q(right, top) s(left, bottom)
// znear為視點到近裁截面的距離(為一正數)
// zfar為視點到遠裁截面的距離(為一正數 zfar>znear)
void glfrustum( gldouble
left,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( glint
x,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...