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

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE Coordinate Transforms

Posted on 2014-12-07 17:01 eryar 閱讀(4467) 評論(1)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE Coordinate Transforms

eryar@163.com

Abstract. The purpose of the OpenGL graphics processing pipeline is to convert 3D descriptions of objects into a 2D image that can be displayed. In many ways, this process is similar to using a camera to convert a real-world scene into a 2D print. To accomplish the transformation from 3D to 2D, OpenGL defines several coordinate spaces and transformations between those spaces. Each coordinate space has some properties that make it useful for some part of the rendering process. The transformations defined by OpenGL afford applications a great deal of flexiblity in defining 3D-to-2D mapping. So understanding the various transformations and coordinate spaces used by OpenGL is essential. The blog use GLUT to demenstrate the conversion between 3D and 2D point.

Key Words. OpenCASCADE, OpenGL, Coordinate Transform,

1. Introduction

交互式計算機圖形學的迅速發展令人興奮,其廣泛的應用使科學、藝術、工程、商務、工業、醫藥、政府、娛樂、廣告、教學、培訓和家庭等各方面均獲得巨大收益。與圖形交互的方式目前主要還是鍵盤和鼠標或pad上的觸摸方式。交互的方式主要分為兩種,一是在二維的屏幕或窗口上對三維的模型進行控制;一是對三維視圖進行控制(在OpenSceneGraph中對應拖拽器和漫游器)。這就需要對計算機圖形學中的坐標變換的原理有所理解。

三維場景視圖的計算機生成步驟有點類似拍一張照片的過程,但與使用照相機相比,利用圖形軟件生成的場景視圖有更大靈活性和更多的選擇。我們可以選擇平行投影或透視投影,還可以有選擇地沿視線消除一些場景等。

通過從三維模型到二維屏幕窗口的實現過程理解,方便理解計算機中對場景觀察的實現。場景的觀察即注重一個從三維世界轉換到二維屏幕的過程。假設場景的觀察者使用一臺相機來全程記錄世界的變化,那么相機位置的移動、角度偏轉、焦距變化及鏡頭類型的選用都會改變底片上呈現的內容,也就是觀察這個世界的方式。

通過從二維屏幕到三維場景中實現的理解,方便用戶通過二維的屏幕窗口的程序界面來操縱三維世界中的模型,如三維中模型的選擇及對選擇中的模型進行相關的變換,如移動、旋轉等。

本文結合OpenCASCADE中的類Graphic3d_Camera及GLUT來說明這兩個過程,進而對OpenCASCADE中可視化模塊的理解。通過對OpenGL中坐標變換原理的理解,為OpenCASCADE中對視圖的操作及拓樸模型(點、線、面和體)選擇的實現的理解打下基礎,良好的交互可以讓場景中的模型充滿生機。

2.From 3D to 2D

從三維的模型到二維屏幕,OpenGL的渲染管線分為以下幾個部分:

v 模型視點變換MODELVIEW TRANSFORMATION;

v 投影變換PROJECTION TRANSFORMATION;

v 視口變換VIEWPORT TRANSFORMATION;

wps_clip_image-24016

Figure 2.1 OpenGL Vertex Transformation Pipeline

如上圖所示為從模型坐標系到設備坐標系變換的管線,即模型經過這些變換后,最終才能顯示在設備屏幕上。

wps_clip_image-13319

Figure 2.2 Stages of Vertex Transformation(OpenGL Programming Guide)

在OpenGL中每個變換都對應了一個矩陣運算,如對模型視點的變換對應了模型視點矩陣,可以通過glMatrixMode(GL_MODELVIEW)來指定義當前的矩陣模式,再通過glLoadMatrix來指定這個變換矩陣。同理,對應投影變換的相關函數為glMatrixMode(GL_PROJECTION)。

wps_clip_image-17213

Figure 2.3 The vertex transformation pipeline(OpenGL SuperBible)

2.1 模型視點變換Model-View Transformation

模型視點變換相當于調整要拍攝的物體的位置、姿態及調整相機使其對準景物的過程,前者稱為模型變換,后者稱為視點變換。在OpenGL中,模型變換和視點變換的結果被合并為模型視點變換矩陣(Model-View Matrix)。在繪制物體前可以使用glTranslate, glRotate等來實現模型的位置、姿態變換。與模型變換對應,我們還可以采用視點變換改變觀察點的位置和方向,即改變相機的位置和拍攝角度,從而改變最終拍攝的結果。可以將視點變換的行為視作模型變換的逆操作,如將相機在X方向移動N米,就相當于將整個場景在-X方向移動了N米。

經過模型視點變換后,即可認為場景從世界坐標系(World Coordinate System, WCS)轉換到了相機坐標系(Viewing Coordinate System, VCS)。對于世界坐標系中任意向量Vwcs將其變換到相機坐標系的公式為:

wps_clip_image-26490

在VCS坐標系中,習慣用n,u,v三個分量來表示坐標基向量,如下圖所示為從世界坐標系變換到視點坐標系的變換:

wps_clip_image-11990

Figure 2.4 From World Cooridante System to Viewing Coordinate System

其中模型視點變換矩陣內容如下所示:

wps_clip_image-32632

2.2 投影變換Projection Transformation

投影變換相當于拍照時通過選擇鏡頭和調整焦距,將景物投射到二維底片的過程。主要操作對象是一個立方體或棱臺形狀的視景體。在視景體之外的對象將被裁剪,因而不會投影到二維面上。

立方體的視景體稱為平行投影視景體,通過使用glOrtho()函數創建,其結果是生成一個正射投影矩陣,如下圖所示:

wps_clip_image-4260

Figure 2.5 Orthographic Viewing Volume(OpenGL Programming Guide)

wps_clip_image-11861

Figure 2.6 Orthogonal Projection View Volume to Normalized View Volume

由于屏幕坐標系經常指定為左手系,因此規范化觀察體也常指定為左手系統。正投影觀察體的規范化變換矩陣是:詳細推導請參考《Computer Graphics with OpenGL》。

wps_clip_image-4694 棱臺形狀的視景體又稱為視錐體,主要用于完成透視投影的工作,這種投影更符合人們的心理習慣,即離視點近的物體較大,離視點遠的物體較小。在OpenGL中由函數glFrustum和gluPerspective來實現。

wps_clip_image-23817

Figure 2.7 Perspective Viewing Volume Specifiedc by glFrustum

一般的透視投影規范化變換矩陣如下所示:詳細推導請參考《Computer Graphics with OpenGL》。

wps_clip_image-20218

相機坐標系的向量Vvcs變換到投影坐標系下(Clipping Coordinate System, CCS)的計算公式為:

wps_clip_image-8316

2.3 視口變換 Viewport Transformation

這一步的意義是將投影變換得到的結果反映到指定的屏幕窗口上去,有點類似將底片沖洗到照片上。如果照片的大小與底片不相符,那么將可能產生成像的放大或縮小。OpenGL中函數glViewport()指定了視口變換的結果區域。這一變換的同時還意味著場景最終變換到窗口坐標系(Device Coordinate System, DCS,又稱為設備坐標系)。

wps_clip_image-7589

Figure 2.8 Mapping the Viewing Volume to the Viewport

從規范化的視景體到屏幕坐標系的變換矩陣是:

wps_clip_image-23055 綜上所述,場景從三維世界坐標系變換到屏幕窗口的所有變換過程進行疊加,則得到如下的變換公式:

wps_clip_image-11851

這三個矩陣可以合并為一個,稱為MVPW矩陣,它決定了任意三維空間中的對象在二維屏幕上表達時的變換過程。

3.From 2D to 3D

在理解OpenGL的整個渲染管線后,再來理解將屏幕上一點轉換為世界坐標就比較容易了。從圖形渲染管線的開始到結束,一個模型坐標系中的坐標被變換到了屏幕坐標,那么現在把整個過程倒過來的話,屏幕上一個二維點坐標也可轉換到世界坐標系中。即將MVPW矩陣求逆即可。如下圖所示為從屏幕坐標到世界坐標的變換過程:

wps_clip_image-26012

Figure 3.1 Viewport cooridnate to World Coordinate(By Zhangci)

當理解從屏幕坐標變換到世界坐標后,也就可以方便理解Picking技術的實現了。即可以通過在二維的屏幕窗口中來選擇拓樸形狀的點、線和面等模型了。可以通過鼠標直接拾取模型后,就可以方便地對模型的位置角度等進行編輯,如OpenSceneGraph中的Dragger:

wps_clip_image-29260

Figure 3.2 OpenSceneGraph TranslateAxisDragger

如上圖所示,用鼠標在任意一個軸上進行拖拽即可以對三維模型的位置進行編輯。

4.Code Example

結合OpenCASCADE的類Graphic3d_Camera和GLUT可以方便來驗證OpenGL中的坐標變換過程。其中類Graphic3d_Camera已經實現從世界坐標系到規范坐標系的變換,但還需要從規范坐標系到屏幕窗口變換的矩陣,根據計算公式實現如下代碼所示:

void BuildNorm2ViewportMatrix(GLsizei theWidth, GLsizei theHeight)
{
    
// row 0
    theNorm2Viewport.ChangeValue(00= (theWidth - 0/ 2.0;
    theNorm2Viewport.ChangeValue(
01= 0.0;
    theNorm2Viewport.ChangeValue(
02= 0.0;
    theNorm2Viewport.ChangeValue(
03= (0 + theWidth) / 2.0;

    
// row 1
    theNorm2Viewport.ChangeValue(10= 0.0;
    theNorm2Viewport.ChangeValue(
11= (0 - theHeight) / 2.0;
    theNorm2Viewport.ChangeValue(
12= 0.0;
    theNorm2Viewport.ChangeValue(
13= (theHeight + 0/ 2.0;

    
// row 2
    theNorm2Viewport.ChangeValue(20= 0.0;
    theNorm2Viewport.ChangeValue(
21= 0.0;
    theNorm2Viewport.ChangeValue(
22= 0.5;
    theNorm2Viewport.ChangeValue(
23= 0.5;

    
// row 3
    theNorm2Viewport.ChangeValue(30= 0.0;
    theNorm2Viewport.ChangeValue(
31= 0.0;
    theNorm2Viewport.ChangeValue(
32= 0.0;
    theNorm2Viewport.ChangeValue(
33= 1.0;
}

當用鼠標點擊直線的起點時,可以得到相應的屏幕坐標及世界坐標,如下圖所示:

wps_clip_image-2112

Figure 4.1 Test Coordinate Transformation

其中世界坐標系中的坐標為坐標原點(0,0,0),轉換到屏幕坐標為(150,150),與鼠標拾取的點一致。再將鼠標拾取的點轉換到三維世界坐標也為原點,只是深度值Z不同。

5.Conclusion

綜上所述,在OpenGL中世界坐標系中的模型經過模型視點變換、投影變換和視口變換最終得到了二維窗口中的顯示圖像。而這個逆過程即從屏幕坐標到三維世界坐標系的變換對交互更有意義,即拾取技術的實現。

結合OpenCASCADE中的類Graphic3d_Camera和GLUT來試驗了這些變換過程,為理解拓樸形狀點、線和面等的選擇交互的實現打下基礎,進一步理解Visualization模塊。

6. References

1. Dave Shreiner. OpenGL Programming Guide(7th Edition). Addison-Wesley. 2010

2. Richard S. Wright Jr., Benjamin Lipchak. OpenGL SuperBible. Sams. 2004

3. Randi J. Rost. OpenGL Shading Language(2nd Edition). Addison-Wesley. 2006

4. Donald Hearn, M. Pauline Baker. Computer Graphics with OpenGL. 2004

5. Zhangci. OpenGL Rendering Pipeline&Coordinate Transformation.

http://blog.csdn.net/zhangci226/article/details/5314184

6. 王銳, 錢學雷. OpenSceneGraph三維渲染引擎設計與實踐. 清華大學出版社. 2009

 

PDF Version and Source Code: OpenCASCADE Coordinate Transforms

Feedback

# re: OpenCASCADE Coordinate Transforms  回復  更多評論   

2014-12-09 13:15 by 老董
太高端了。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩一级不卡| 久久精品综合| 一区二区高清视频| 欧美日韩在线视频首页| 亚洲天堂av图片| 一本色道久久综合亚洲精品小说 | 欧美日本韩国| 亚洲网站在线观看| 亚洲欧美综合国产精品一区| 99精品久久久| 久久精品国产精品亚洲综合| 亚洲高清免费| 在线中文字幕一区| 国产一区二区三区四区五区美女 | 欧美主播一区二区三区美女 久久精品人| 亚洲在线中文字幕| 1024国产精品| 99亚洲一区二区| 国语精品一区| 一本到高清视频免费精品| 国产日韩欧美日韩大片| 亚洲国产一区二区a毛片| 欧美三区在线视频| 久久综合国产精品| 国产精品啊啊啊| 免费久久99精品国产自| 国产精品高精视频免费| 欧美国产精品专区| 国产日韩欧美综合在线| 91久久精品美女| 国产一区视频观看| 亚洲无线视频| 日韩网站在线观看| 久久久久女教师免费一区| 午夜免费在线观看精品视频| 女仆av观看一区| 久色成人在线| 国产亚洲精品资源在线26u| 9色精品在线| 亚洲精品一区二区三区四区高清| 亚洲欧美综合v| 亚洲一区视频在线观看视频| 欧美二区视频| 欧美二区在线播放| 国内精品模特av私拍在线观看| 一区二区三区四区国产精品| 亚洲精品国精品久久99热一| 久久久久久九九九九| 久久久综合网站| 国产麻豆日韩| 亚洲在线一区二区| 亚洲欧美日韩一区| 国产精品成人aaaaa网站| 亚洲日本理论电影| 亚洲最新视频在线| 欧美—级高清免费播放| 亚洲国产黄色片| 亚洲人妖在线| 欧美黑人在线观看| 91久久精品一区二区三区| 亚洲人成网在线播放| 免费h精品视频在线播放| 欧美激情二区三区| 91久久中文| 欧美国产日韩二区| 亚洲日本久久| 亚洲影视在线| 国产美女精品免费电影| 午夜久久一区| 玖玖玖免费嫩草在线影院一区| 狠狠色狠狠色综合日日91app| 久久久av毛片精品| 亚洲国产精品尤物yw在线观看| 亚洲精品亚洲人成人网| 亚洲高清一区二区三区| 欧美天堂亚洲电影院在线播放| 亚洲免费观看| 性视频1819p久久| 韩国女主播一区| 麻豆精品一区二区综合av| 欧美激情国产精品| 亚洲午夜国产一区99re久久| 国产精品亚洲аv天堂网| 欧美专区日韩视频| 亚洲国产欧美在线| 午夜精品久久久久久99热| 国产日韩欧美不卡| 欧美国产激情二区三区| 一区二区三区高清不卡| 久久精品国产999大香线蕉| 亚洲高清毛片| 国产精品入口66mio| 久久嫩草精品久久久精品| 亚洲精品日韩激情在线电影| 欧美在线视屏| 日韩视频在线观看一区二区| 国产精品视频区| 免费日韩精品中文字幕视频在线| 一区二区三区你懂的| 蜜乳av另类精品一区二区| 亚洲桃色在线一区| 亚洲高清不卡一区| 国产精品日日做人人爱| 欧美成人一区二免费视频软件| 亚洲综合第一| 亚洲精品一区久久久久久| 老司机午夜免费精品视频| 亚洲在线中文字幕| 亚洲人成在线播放| 国产在线欧美| 国产精品乱码久久久久久| 欧美激情国产高清| 久久精品一区二区| 亚洲一区二区成人| 日韩一级欧洲| 亚洲国产精品免费| 美女主播精品视频一二三四| 亚欧成人精品| 亚洲一区二区不卡免费| 亚洲激情网站| 伊人久久大香线蕉综合热线| 国产女精品视频网站免费| 欧美午夜精品久久久久久久 | 亚洲精美视频| 久久人人97超碰精品888| 欧美在线精品免播放器视频| 亚洲视频欧洲视频| 亚洲伦理一区| 亚洲精品一区中文| 亚洲激情在线观看| 亚洲福利在线视频| 亚洲电影免费观看高清| 一区二区三区在线高清| 国内精品久久久久影院优| 国产欧美日韩伦理| 国产日韩在线看片| 国产欧美精品日韩精品| 国产精品亚发布| 国产亚洲a∨片在线观看| 国产日韩欧美中文在线播放| 国产嫩草影院久久久久| 国产情人综合久久777777| 国产精品自拍在线| 国产亚洲精品7777| 尤物yw午夜国产精品视频| 激情亚洲网站| 在线色欧美三级视频| 亚洲国产人成综合网站| 日韩视频亚洲视频| 亚洲国产婷婷| 久久久精品一品道一区| 午夜视频在线观看一区二区三区| 亚洲影院在线| 欧美在线黄色| 麻豆精品在线播放| 欧美日本免费| 国产精品久久一区二区三区| 国产性做久久久久久| 尤物精品在线| 中文久久乱码一区二区| 午夜欧美电影在线观看| 久久久久免费视频| 亚洲国产成人精品久久| 日韩视频一区二区三区| 香蕉成人啪国产精品视频综合网| 久久激情视频免费观看| 牛牛影视久久网| 国产精品豆花视频| 一区精品久久| 亚洲一区二区免费| 裸体女人亚洲精品一区| 亚洲国产精品一区| 亚洲一级免费视频| 久久久综合视频| 欧美天天在线| 亚洲第一成人在线| 亚洲专区国产精品| 欧美韩日视频| 亚洲欧美日韩国产一区二区| 欧美成年人视频网站| 国产精品一级| 一本色道久久综合狠狠躁篇的优点| 午夜欧美大尺度福利影院在线看| 欧美国产视频在线| 欧美在线观看视频| 国产精品扒开腿做爽爽爽软件| 好吊色欧美一区二区三区视频| 一本一道久久综合狠狠老精东影业| 久久久精品国产免大香伊| a4yy欧美一区二区三区| 老司机67194精品线观看| 国产精品一区=区| 99国内精品久久| 欧美 日韩 国产 一区| 亚洲影院污污.| 欧美色道久久88综合亚洲精品| 亚洲国产99精品国自产| 久久久精品一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美在线地址|