freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

三維圖像的生成與顯示技術研究(編輯修改稿)

2025-07-04 12:14 本頁面
 

【文章內容簡介】 換的順序與代碼中寫的順序是相反的。所以,“先移動后旋轉”和“先旋轉后移動”得到的結果很可能不同。 提高繪圖效率和場景的層次性在繪制具有多層建模層次的復雜場景時,會涉及很多模型視圖矩陣操作,可利用OpenGL提供的矩陣堆棧來提升效率。矩陣堆棧適用于構建層次式的模型,也就是通過簡單的模型構建復雜的模型。例如,假如繪制的是一輛有4個輪子的汽車,每個輪子用5顆螺釘固定到汽車上。由于所有的輪子都是相同的,所有的螺釘看上去也沒什么區(qū)別,因此可以用一個函數(shù)繪制輪子,用另一個函數(shù)繪制螺釘,這兩個函數(shù)在一個方便的位置和方向繪制一個輪子或一顆螺釘,例如它們的中心在原點,并且它們的軸與Z軸對齊。當繪制這輛包括了輪子和螺釘?shù)钠嚂r,需要4次調用畫輪子的函數(shù),每次都使用不同的變換,使每個輪子處于正確的位置。當繪制每個輪子時,需要5次調用畫螺釘?shù)暮瘮?shù),每次都要根據輪子進行適當?shù)淖儞Q。假定只需要繪制車身和輪子,可以改用以下方法。繪制車身。記住自己的位置,并移動到右前輪的位置。繪制輪子,并丟棄上一次所進行的變換,使自己回到車身的原點位置。記住自己的位置,然后移動到左前輪。類似地,對于每個輪子,需要繪制輪子,記住自己的位置,然后連續(xù)地移動移動到繪制螺釘?shù)拿總€位置,在畫完每個螺釘之后丟棄上一次所進行的變換。由于變換是以矩陣的形式存儲的,因此矩陣堆棧提供了一種理想的機制,用來完成這種類型的連續(xù)的記憶,移動和丟棄操作。在OpenGL中模型視圖矩陣的操作是矩陣堆棧最頂部的那個元素。glPushMatrix是壓棧,glPopMatrix是彈出。 投影一個場景要顯示在屏幕上必須確定場景中的哪些物體是可見的,投影變換的一個目的就是定義一個可視空間。定義可視空間有兩種用途。它決定了一個3D 空間中的物體如何映射到屏幕上(即通過使用透視投影或正投影),并且定義了哪些物體或物體的部分被裁剪于最終的圖像之外。投影有透視投影和正投影兩種類型。 透視投影透視投影最顯著的特點是透視縮放(foreshortening):物體距觀察點越遠,它最終在屏幕上看上去就越小,比如在火車頭內向前照一個鐵軌的照片,兩條鐵軌似乎在遠處相交了。這是因為透視投影的可視空間是一個金字塔的平截頭體。位于可視空9間之內的物體被投影到金字塔的頂點,也就是觀察點位置。靠近觀察點的物體看上去大一些,因為和遠處的物體相比,在平截頭體的較大部分里,它們占據了相對較大的可視空間。這種投影方法常用于動畫,視覺模擬以及其他要求某種程度的現(xiàn)實感的應用領域,因為它和日常生活中用眼睛觀察事物的方式相同。g1Frustum ()函數(shù)用于定義一個平截頭體,它計算一個用于實現(xiàn)透視投影的矩陣,并把它與當前的投影矩陣(一般為單位矩陣)相乘。記住,可視空間用于裁剪那些位于它之外的物體。平截頭體的4個側面,項面和底面對應于可視空間的6個裁剪平面,位于這些平面之外的物體或物體的部分將被裁剪掉,不會出現(xiàn)在最終的圖像中。且g1Frustum()函數(shù)并不需要定義一個對稱的可視空間。 frustum bottomleftrighttopnearfar glFrustum()創(chuàng)建透視投影平截頭體在三維空間中有一個默認的方向,可以在投影矩陣上執(zhí)行旋轉或移動,來改變方向。但是,這種方法難度較大。glFrustum() 的使用不是很直觀。因此,也可以用OpenGL工具庫函數(shù) g1uPerspective()。這個函數(shù)創(chuàng)建一個可視空間,它與調用glFrustum()所產生的可視空間相同,但可以用一種不同的方式來指定它。這個函數(shù)并不是指定近裁剪平面的角,而是指定y方向上的視野的角度(θ)和縱橫比(x/y) 。(對于正方形的屏幕,)。這兩個參數(shù)足以確定沿實現(xiàn)方向的未平截頭體金字塔,還需要指定觀察點和近側及遠側裁剪平面的距離,也就是對這個金字塔進行截除。此外,g1uPerspective() 僅限于創(chuàng)建沿視線方向同時在x軸和y軸上對稱的平截頭體,這通常是所需要的。和glFrustum()函數(shù)一樣,可以執(zhí)行旋轉或移動,改變由 gluPerspective()所創(chuàng)建的可視空間的默認方向。如果沒有這樣的變換,觀察點就位于原點,視線的方向沿z軸的負方向。使用gluPerspective(),需要挑選適當?shù)囊曇爸?,否則圖像看上去就會變形。為了10獲得完美的視野,可以推測自己的眼睛在正常情況下距離屏幕有多遠以及窗口有多大,并根據距離和大小計算視野的角度。計算結果可能比想象的要小。也可以換一種方法考慮這個問題。一個35毫米的照相機如果要達到94度的視野,它的鏡頭就要求達到20毫米,這已經是非常寬的鏡頭了。 frumstumnearfarhwAspect=w/hθ gluPerspective()創(chuàng)建透視投影 正投影正投影相當于在無限遠處觀察得到的結果,它只是一種理想狀態(tài)。但對于計算機來說,使用正投影有可能獲得更好的運行速度。在正投影下,可視空間是個平行的長方體。物體和照相機的距離并不影響它看上去的大小。這種類型的投影用于建筑藍圖和計算機輔助設計的應用程序。在這類應用程序中,當物體經過投影之后,會保持它們的實際大小以及它們之間的角度。gl0rtho()函數(shù)創(chuàng)建一個正交平行的可視空間。和glFrustum()一樣,需要指定近側裁剪平面的角和到遠側裁剪平面的距離。如果沒有其他變換,投影的方向就與z軸平行,觀察點的方向直接朝向 z軸的負方向。觀察點 g10rtho()創(chuàng)建正交投影11 投影變換示例以下兩圖是圖43在透視投影和正投影下的不同觀察效果。 正投影 透視投影 窗口與視口窗口(window) :世界坐標系中要顯示的區(qū)域 (不是指屏幕窗口)。視口(viewport) :窗口映射到顯示器上的區(qū)域。窗口定義了顯示內容,而視口定義了顯示位置和大小。在規(guī)范化坐標系NVC下定義視口范圍,變換到規(guī)范化的設備坐標系中。ywmaxywminWC xwmax DC窗口 視口xwmin xvmin xvmaxyvmaxywmin(xw,yw). .(xv,yv) 窗口——視口變換關縮放S+位移T的復合變換計算公式如下: minaxminaxwv??? minaxwvs?? inaxinaxyy inaxyy若縮放系數(shù)sx和sy不相等,圖形對象會產生變形。 視口變換視口變換類似于照相機沖洗相片大小這個階段。在計算機圖形中,視口是個矩12形的窗口區(qū)域,圖像就是在這個區(qū)域中繪制。視口是用窗口坐標來測量的,后者反映了屏幕上的像素相對于窗口左下角的位置。所有的頂點都已經通過模型視圖矩陣和投影矩陣進行了變換,那些位于可視空間之外的頂點均已被裁剪掉。在屏幕上打開窗口的任務是由窗口系統(tǒng)而不是OpenGL負責的。但是,在默認情況下,視口被設置為打開窗口的整個像素矩陣??梢允褂胓lViewPort()函數(shù)選擇一個更小的繪圖區(qū)域。例如,可以對窗口進行劃分,在同一個窗口中顯示分割屏幕的效果,以顯示多個視圖。使用glViewport() 來定義視口。 變換深度坐標深度Z坐標是在視口變換期進行編碼的(并在以后存儲于深度緩沖區(qū)中)??梢允褂胓lDepthRange()函數(shù),對 z 值進行縮放,使他們位于一個需要的范圍之間。在透視投影中,變換后的深度坐標(和x坐標及y坐標一樣)也進行了透視除法(除以w坐標) 。當變換后的深度坐標遠離近側平面時,它的位置就逐漸變得不太精確。 幾何圖元的繪制無論多么復雜的模型都要分解成點,線,面這些圖元,再將所有這些模型的圖元信息傳遞給OpenGL,OpenGL根據這些信息來繪制圖形的幾何形狀。幾何學中的點、直線和多邊形的概念與在計算機中的點、直線和多邊形會有所不同。數(shù)學上的點,只有位置,沒有大小。但在計算機中,無論計算精度如何提高,始終不能表示一個無窮小的點。另一方面,無論圖形輸出設備(例如,顯示器)如何精確,始終不能輸出一個無窮小的點。一般情況下,OpenGL中的點將被畫成單個的像素,雖然它可能足夠小,但并不會是無窮小。同一像素上,OpenGL可以繪制許多坐標只有稍微不同的點,但該像素的具體顏色將取決于OpenGL的實現(xiàn)。同樣的,數(shù)學上的直線沒有寬度,但OpenGL的直線則是有寬度的。同時,OpenGL的直線必須是有限長度,而不是像數(shù)學概念那樣是無限的??梢哉J為,OpenGL的“直線”概念與數(shù)學上的“線段”接近,它可以由兩個端點來確定。多邊形是由多條線段首尾相連而形成的閉合區(qū)域。OpenGL規(guī)定,一個多邊形必須是一個“凸多邊形”。通過點、直線和多邊形,就可以組合成各種幾何圖形。要 OpenGL按照用戶的設計繪制物體,除了必須向OpenGL傳遞頂點信息外,還必須將這些頂點的組合方式傳遞給OpenGL。即需要把一組頂點放在一對glBegin()和glEnd()之間,傳遞給glBegin()的參數(shù)決定了由這些頂點所構建的幾何圖元的類型。例如,同樣指定了五個點,所傳遞的圖元類型參數(shù)不同,將繪制不同的圖元。13● ●●● ●GL_POLYGON GL_Point 多邊形或者一組點 點OpenGL是基于點的,也就是說在OpenGL 中,所有的幾何物體最終都被描述成一組有序的頂點。可以使用glVertex *()函數(shù)來指定頂點。點可以用一組稱為頂點的浮點數(shù)來表示。所有的內部計算都是建立在把頂點看成是三維的基礎之上的。用戶可以把頂點指定為二維的形式(也就是說,只有x和y坐標),并由 OpenGL為它賦一個值為 0的z坐標。 直線在 OpenGL中,直線這個術語表示一段線段,而不是數(shù)學意義上在兩邊無限延伸的直線。指定一些列彼此相連接的線段,甚至是閉合的線段都是非常容易的。但是不管在哪種情況下,組成連線系列的直線都是根據它們的終點位置的頂點指定的。 多邊形 多邊形是由單閉合的線段循環(huán)包圍的區(qū)域,其中線段是由它們的終點位置的頂點所指定的。一般情況下,多邊形是通過填充它內部的像素繪制而成的。但是,也可以僅僅繪制多邊形的外框,甚至把它畫成一系列的點的形式。在一般情況下,多邊形有可能非常復雜。因此OpenGL在基本多邊形的構成方面施加了很強的限制。首先,在OpenGL中,多邊形的邊不能相交(按照數(shù)學上的術語,滿足這種條件的多邊形稱為簡單多邊形)。其次,OpenGL的多邊形必須是凸多邊形,也就是不存在內陷的部分。準確的描述是:在一個多邊形的內部任意取兩個點,如果連接這兩個點的線段都在這個多邊形的內部,那么這個多邊形就是凸多邊形。但是,OpenGL并不限制構成凸多邊形的邊界線段的數(shù)量。另外,OpenGL無法描述中間有洞的多邊形,因為它們是非凸的,并且無法由一個閉合的線段循環(huán)所構成的邊界來繪制。如果用OpenGL 描述一個非凸的填充多邊形,其結果是不確定的。例如,在大多數(shù)系統(tǒng)中,不大于多邊形凸包的地方將被填充。但在有些系統(tǒng)中,小于凸包的地方將被填充。14有效的 無效的 有效和無效的多邊形OpenGL在合法多邊形的構成方面施加這些限制的原因是:這些限制有利于提供快速的多邊形渲染硬件來渲染符合條件的多邊形。簡單多邊形的渲染速度非常快,而那些困難的情況就難以快速檢測。因此,為了最大限度地提高性能,OpenGL只得做出取舍,假定所有的多邊形都是簡單多邊形?,F(xiàn)實世界的許多表面是由簡單多邊形,非凸多邊形或有洞的多邊形組成的。由于所有這類多邊形都可以由簡單多邊形組合而成,因此復雜的幾何圖形描述對多邊形進行分格化,把它們分解成許多可以進行渲染的簡單多邊形。由于OpenGL的頂點總是三維的,因此形成特定多邊形邊界的點不必位于空間中的同一個平面上(當然,在許多情況下,它們確實位于同一個平面上。例如,當多邊形的所有頂點的z 坐標都是 0的時候,或者當多邊形是個三角形的時候)。如果一個多邊形的所有頂點并不位于同一個平面上,那么它在空間中經過各種不同的旋轉,并改變視點和現(xiàn)實屏幕上的投影之后,這些點可能不再構成一個簡單的凸多邊形。例如,想象一個由4個點組成的四邊形,它的4個點都稍稍偏離原平面。如果從側面看過去,將看到一個像蝴蝶結一樣的非簡單多邊形,這種多邊形無法保證能夠進行正確的渲染。當利用真實表面上的點所組成的四邊形來模擬彎曲表面時,這種情況常常出現(xiàn)。為了避免這個問題,可以使用三角形來模擬表面,因為任何三角形都保證位于一個平面上。 矩形由于矩形在圖形應用程序中極為常見OpenGL提供了填充矩形圖元函數(shù)glRect*() 。繪制矩形的方法類似于繪制多邊形。但是使用的特定OpenGL實現(xiàn)可能會對用于繪制矩形的glRect *() 函數(shù)進行優(yōu)化。另外,盡管矩形在三維空間中有一個初始的特定方向(在xy平面,并且與坐標軸平行),但是可以通過旋轉或其他變換對矩形的方向進行更改。所有的光滑曲線或表面都可以進行模擬,并且可以到任意高的精度,其方法就是組合大量的短直線或小多邊形。因此,只要對曲線或表面進行足夠的細分,并用直線段和平面多邊形來近似地模擬它們,它們看上去就像是真的彎曲一樣。盡管曲線并不是幾何圖元,但 OpenGL還是提供了一些直接的支持,對它們進行細分和繪制。15 近似曲線第四章 三維圖像顯示的實現(xiàn)及分析上一章對 OpenGL 的基本理論做了詳細的介紹,接下來以衛(wèi)星與深空三維場景的實時仿真技術,具體的介紹一下 OpenGL 在實現(xiàn)三維圖像的生成及顯示的原理和實現(xiàn)過程。 概要設計因為 OpenGL 與 VC+
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1