青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

SoRoMan

人若無名,便可專心練劍.

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  12 隨筆 :: 1 文章 :: 41 評論 :: 0 Trackbacks

感覺很多書上都沒講清楚透視投影變換的推導過程,自己推導了下,以前一直含糊的關于方形/非方形的視平面和屏幕的寬高比的問題也有了答案.本文組織如下:

1.相機空間到視平面的變換
2.視平面到屏幕的變換
3.綜合
4.一般情形

1.相機空間到視平面的變換


?????????????????????? * p (xc,0, zc)
???????????????????? ?/ |
??????????????????? ?/? |
?????????????????? ?/?? |
?????????? X??? |/???? |
?????????? ^???? *p' |(xp,0,zp)
?????????? |?? / |????? |
?????????? |? /? |???? ?|
?????????? | /?? |???? ?|
C(cam)?|/??? |???? ?|
--------*----|----*------------->Z
?????????? 0??? dx?? zc
???? (X-Z平面的投影示圖)

a.透視投影一般的視景體為棱臺,相機空間的物體會投影到視平面z=d,這里考慮左手坐標系,矩陣使用行優先方式。如圖所示,由相似三角形知識可知相機空間中的物體投影到視平面上的坐標為:

xp = xc*(dx/zc)
yp = yc*(dy/zc)

其中,xc,yc,zc為相機空間坐標,xp,yp,zp為視平面坐標,dx,dy為x,y軸向的視距view distance,視平面到camera的距離,
故相機空間投影到視平面上的矩陣Tcp為:

|dx 0? 0 0? |

|0? dy 0 0? |

|0? 0?? 1 1? |

|0? 0?? 0 0? |

(驗證:Tcp右乘點p(xc,yc,zc,1)得點p'(xc*dx, yc*dy, zc, zc),轉換為3D坐標為(xc*dx/zc, yc*dy/zc, 1),正確。)

********************************************************************
注:因為轉換過程中點使用的是4D齊次坐標,所以最后需轉換為3D坐標。4D齊次坐標(x,y,z,w)轉換為3D坐標的方法為除以w分量,即對應3D坐標為(x/w,y/w,z/w)。
********************************************************************


考慮dx/zc和dy/zc項,如果dx != dy,則投影后x,y的比例會發生變化(原因:投影前坐標比例為xc/yc,投影后為xp/yp = xc*(dx/zc)/yc*(dy/zc) = xc*dx/yc*dy),從而投影后的圖像的x,y比例會發生變形。

---------------------------------------------
結論1:所以,一般都會令d=dx=dy,即x,y向的視距相同。否則,圖像失真。
---------------------------------------------

考慮視角(view angle,或視野filed of view)的問題,視角的大小不會影響到物體投影后的坐標,只會影響可視的范圍。

在視距一樣的情況下,x,y軸的視角可以不一樣。如果一樣,那么視平面就是一個正方形的。于是有:

tan(theta_x/2) = width_p/d
tan(theta_y/2) = height_p/d?

其中,theta_x,theta_y為x,y軸向的視角,width_p,height_p為視平面z=d的寬度(x軸)和高度(y軸)。
----------------------------------------------------------------
結論2:視平面的寬高比rp=width_p/height_p = tan(theta_x/2)/tan(theta_y/2)。
----------------------------------------------------------------

2.視平面到屏幕的變換

下面就是視平面到屏幕的變換了,這是一個2D到2D的變換(視平面的坐標需伸縮以填滿整個屏幕空間,即在視平面中出現的所有的點要變換到屏幕上去,同時x,y軸向的比例還要維持和變換前一樣,以免比例失真,同時視平面的坐標原點和屏幕中心點(x0=(width_s)/2, y0=(height_s)/2)對應),其實,就是一個坐標縮放加平移的過程:

xs = xp*kx + x0
ys = -yp*ky + y0
?
矩陣Tps為:

|kx???? 0??????0 0? |

|0????? -ky????0 0? |

|0????? 0?????? 1 0? |

|x0?? y0??????0 1? |

(驗證:Tps右乘點p(xp,yp,zp,1)得點p'(xp*kx + x0, -yp*ky + y0, zp, 1),轉換為3D坐標為(xp*kx + x0, -yp*ky + y0, zp),正確。)

其中,kx,ky(kx>0,ky>0)為x,y軸向的縮放因子(kx=(width_s)/(width_p), ky = (height_s)/(height_p),和視距相同,kx,ky的值必須一樣,否則圖像的x,y比例又會發生變形。這里-yp*ky是因為一般屏幕的y軸是向下的,跟相機空間和視平面坐標系中的y軸方向相反。
------------------------------------------------------------------------------------------------
結論3: 一般令k=kx=ky,即x,y向的縮放因子相同。否則,圖像失真。
于是有,width_s/width_p = height_s/height_p,變化等式得,rp = width_p/height_p = width_s/height_s = rs
所以,在x,y軸視距一樣的情況下,要想最后變換到屏幕上的圖像x,y比例不失真,必須rp=rs,即視平面的寬高比和屏幕的寬高比一樣。

-----------------------------------------------------------------------------------------------

********************************************************************
注:若屏幕寬高為W,H,當W != H,即屏幕不為方形的時候,要確保投影到屏幕上的圖像x,y比例不失真,則x,y軸視角(或視野FOV)肯定不能相等。
原因: 由結論2,3知,rp=width_p/height_p = tan(theta_x/2)/tan(theta_y/2)=width_s/height_s=rs=W/H。 故由W/H != 1 => theta_x != theta_Y.
********************************************************************

3.綜合:

相機空間點p轉換到屏幕空間點p',變換公式為:

xs = xc*(dx/zc)*kx + x0 = xc*(d/zc)*k + x0
ys = -yc*(dy/zc)*ky + y0 = -yc*(d/zc)*k + y0

綜合變換矩陣(相機空間到屏幕空間)Tcs為:
?
Tcs = Tcp*Tps =

|d*k??? 0?????? 0 0? |

|0????? -d*k??? 0 0? |

|x0???? y0????? 1 1? |

|0????? 0???????? 0? 0|

?其中,d為視距,k為屏幕寬高比或視平面寬高比,x0,y0為屏幕中心,注:最后需轉換為3D坐標。

(驗證:Tcs右乘點p(xc,yc,zc,1)得點p'(xc*d*k + x0*zc, -yc*d*k + y0*zc, zc, zc),轉換為3D坐標為(xc*(d/zc)*k + x0, -yc*(d/zc)*k + y0, 1),正確。)

4.一般情形:
?************************************
視距為1,x軸視角為90度,屏幕寬高為W,H.
************************************
?
代入d=1,theta_x = PI/2,x0= W/2,y0=H/2,則視平面寬高為width_p = 2。
要確保屏幕上的圖像x,y比例不失真,即rs=rp,有
height_p = 2/rp=2/rs=2H/W,
k=kx=ky=width_s/width_p = W/2.

于是,矩陣為:

Tcs1 =?

|W/2??? 0?????? 0 0? |

|0????? -W/2??? 0 0? |

|W/2??? H/2?? 1 1? |

|0????? 0???????? 0 0? |



?? |W/2??? 0????????????????? 0 0? |

|0????? -H/2*(W/H)??? 0 0? |

|W/2??? H/2????????????? 1 1? |

|0????? 0?????????????????? ?0 0? |

(可以看到,y軸的縮放因子中乘上了寬高比(aspect ratio))
?這個矩陣較常用。

---------------------
有什么問題,歡迎探討.
?

posted on 2006-09-17 00:34 SoRoMan 閱讀(8422) 評論(4)  編輯 收藏 引用

評論

# re: 探討:3D透視投影變換詳解-兼談視平面和屏幕的寬高比問題 2007-03-29 12:10 heihei
Can you give you commons ,why it is  回復  更多評論
  

# re: 探討:3D透視投影變換詳解-兼談視平面和屏幕的寬高比問題[未登錄] 2007-03-29 12:13 a
http://www.chinasoft.org.cn/Html/mm/05155655.html  回復  更多評論
  

# re: 探討:3D透視投影變換詳解-兼談視平面和屏幕的寬高比問題 2008-05-14 11:29 啊夏
hi SoRoman:
在你的博客上拜讀了你的大作"探討:3D透視投影變換詳解-兼談視平面和屏幕的寬高比問題".受益良多.

我按照你文章里面描述的.自己推導了一個公式.
世界坐標系的建立是這樣的. x左向右.y上向下,z朝向屏幕里面.
在里面有一點 p(x,y,z);
設視點v (0,0,vz); 然后采用透視投影將p投在 xoy平面上.

我的公式是這樣的.

t = -z/vz;
x' = t*x;
y' = t*y;
然后直接將 點(x',y') 繪制到 xoy屏幕上.

現在我遇到的問題是,在對線采用這樣的方式進行投影的時候會有飛線的情況發生.(我是在一個地圖引擎中使用). 在地圖級別比較小的情況下,繪制還算正確.但是如果地圖一放大線就亂了. 郁悶了好長時間了,希望能得到你的回信. 我的MSN: ren543#hotmail.com   回復  更多評論
  

# re: 探討:3D透視投影變換詳解-兼談視平面和屏幕的寬高比問題 2012-09-22 09:24 xwl
tan(theta_x/2) = width_p/d
tan(theta_y/2) = height_p/d

這是地方有點問題吧,應該是
tan(theta_x/2) = width_p/2d
tan(theta_y/2) = height_p/2d
  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产专区一区| 亚洲区免费影片| 国产精品一区二区三区久久久| 日韩视频中文| 久久久精品国产免费观看同学| 欧美日韩国产精品一区二区亚洲| 狠狠色狠狠色综合| 亚洲视频 欧洲视频| 欧美成人一区在线| 久久久久九九视频| 狠狠色狠狠色综合人人| 久久精品国产视频| 午夜一级在线看亚洲| 国产精品欧美精品| 亚洲欧美日韩在线一区| 日韩视频在线观看一区二区| 欧美乱在线观看| 亚洲精品国产视频| 亚洲精品日韩激情在线电影| 欧美精品1区2区| 亚洲精品国产精品乱码不99| 欧美电影免费观看| 欧美1区2区3区| 亚洲美女视频在线观看| 亚洲日本va在线观看| 欧美国产专区| 亚洲视频免费在线| 亚洲视频电影图片偷拍一区| 国产精品人人做人人爽人人添| 午夜精品久久99蜜桃的功能介绍| 亚洲午夜日本在线观看| 国产日韩精品在线| 麻豆av一区二区三区久久| 麻豆成人av| 99这里有精品| 亚洲网友自拍| 国产精品久久久久毛片大屁完整版| 欧美性视频网站| 久久av资源网| 久久久青草婷婷精品综合日韩 | 欧美电影免费观看| 欧美精品一区二区三区很污很色的| 夜夜爽www精品| 亚洲字幕在线观看| 亚洲高清视频中文字幕| 亚洲国产高清在线观看视频| 欧美—级a级欧美特级ar全黄| 夜夜爽av福利精品导航| 亚洲免费小视频| 在线成人h网| 99精品国产福利在线观看免费| 国产伦精品一区二区三区免费迷| 久久精品国产精品亚洲精品| 欧美va亚洲va香蕉在线| 亚洲男人第一网站| 久久久久久综合| 亚洲夜晚福利在线观看| 久久精品亚洲| 中国日韩欧美久久久久久久久| 亚洲综合日韩在线| 怡红院精品视频| 亚洲私人黄色宅男| 亚洲黄色免费网站| 亚洲欧美精品伊人久久| 亚洲国产日韩欧美在线动漫| 夜夜嗨av一区二区三区网站四季av| 国产一区二区三区久久久| 亚洲高清视频一区| 国产午夜精品一区二区三区欧美| 欧美激情中文不卡| 国产日韩在线视频| 亚洲美女区一区| 亚洲视频在线观看网站| 精品盗摄一区二区三区| 99国产一区| 亚洲精品午夜| 久久久久成人精品| 欧美中文字幕在线| 欧美日韩国产在线播放| 六月婷婷久久| 国产午夜精品一区二区三区视频| 亚洲精品一区在线观看香蕉| 亚洲国产成人精品女人久久久| 亚洲欧美影音先锋| 亚洲视频在线一区| 免费观看成人| 免费亚洲电影| 国产婷婷色一区二区三区四区| 日韩午夜剧场| 日韩视频一区二区三区| 久久亚洲欧美| 麻豆成人在线| 精品999在线播放| 欧美在线视频一区二区三区| 午夜久久福利| 国产精品ⅴa在线观看h| 亚洲肉体裸体xxxx137| 久久综合久久88| 国产午夜精品一区二区三区视频| 一区二区欧美视频| 99成人在线| 欧美精品成人| 亚洲精品国产精品国自产在线| 亚洲国产精品精华液网站| 久久精品国产精品亚洲综合| 久久久久www| 狠狠色丁香婷婷综合| 久久久99爱| 欧美黑人一区二区三区| 亚洲国产专区| 欧美日韩精选| 亚洲午夜精品网| 久久www成人_看片免费不卡| 国模私拍视频一区| 久久中文字幕一区二区三区| 欧美国产极速在线| 日韩亚洲欧美成人| 欧美体内谢she精2性欧美| 亚洲视频欧美在线| 欧美自拍偷拍午夜视频| 黑丝一区二区| 欧美成人午夜影院| 夜夜嗨av一区二区三区四季av| 午夜久久久久久| 国产一级一区二区| 毛片精品免费在线观看| 亚洲精品综合久久中文字幕| 亚洲欧美日韩中文播放| 国际精品欧美精品| 欧美激情视频一区二区三区免费 | 精品999日本| 欧美成人精品不卡视频在线观看| 亚洲精品偷拍| 久久国产精品一区二区| 一区二区三区无毛| 欧美绝品在线观看成人午夜影视| 亚洲视频精品| 欧美成人免费在线视频| 一区二区三区日韩精品视频| 国产精品区一区二区三区| 久久一区欧美| 亚洲小少妇裸体bbw| 国模叶桐国产精品一区| 免费视频一区| 亚洲综合色在线| 亚洲韩国青草视频| 久久精品系列| 一本久道久久久| 黄色成人在线观看| 欧美午夜免费影院| 久久艳片www.17c.com| 一区二区三区视频免费在线观看 | 亚洲在线视频观看| 亚洲黑丝在线| 老司机久久99久久精品播放免费| 在线一区二区三区四区五区| 韩国精品久久久999| 欧美日韩视频在线| 裸体丰满少妇做受久久99精品| 亚洲一区二区三区在线| 亚洲国产精品久久人人爱蜜臀| 午夜一区二区三区在线观看| 亚洲日本激情| 在线看片一区| 亚洲综合首页| 亚洲女与黑人做爰| 国产精品免费看久久久香蕉| 中日韩美女免费视频网站在线观看 | 巨胸喷奶水www久久久免费动漫| 999亚洲国产精| 免费在线欧美视频| 亚洲国产美女| 亚洲国产一区二区三区a毛片| 性久久久久久久| 亚洲国产成人av在线| 久久久久久久波多野高潮日日| 久久综合给合久久狠狠狠97色69| 国产一区视频网站| 欧美成人一区二区三区片免费| 91久久久亚洲精品| 91久久精品国产91性色tv| 亚洲精品一区二区网址| 国产精品久久久一区麻豆最新章节 | 欧美在线视频一区二区三区| 在线亚洲自拍| 欧美激情精品久久久久久免费印度 | 韩日欧美一区二区三区| 久久精品免费| 久久国产毛片| 久久大综合网| 欧美淫片网站| 欧美亚洲免费电影| 午夜综合激情| 香蕉乱码成人久久天堂爱免费| 亚洲小说欧美另类社区| 一区二区三区欧美视频| 亚洲午夜91| 欧美一级电影久久| 久久免费精品日本久久中文字幕| 久久综合五月|