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

天行健 君子當自強而不息

頂點坐標變換(1)

空間中的物體需要使用三維坐標來描述,而顯示器是一個二維的表面,所以在屏幕上渲染一個三維場景時,首先需要將描述空間物體的三維坐標變換為二維坐標(世界坐標到屏幕坐標),這在Direct3D中稱為頂點坐標變換。頂點坐標變換通常通過矩陣來完成。可以把頂點坐標變換想象成攝像過程,三維世界的景物通過攝像機的拍攝顯示在二維的相片上,所不同的是把相片換成了屏幕。

 

頂點坐標變換和光照流水線概述

Direct3D中渲染三維對象的過程可分為兩個階段。第一階段稱為坐標變換和光照(Transforming and Lighting T&L)階段。在這個階段,每個對象的頂點被從一個抽象的、浮點坐標空間轉換到基于像素的屏幕空間(坐標變換不僅包含物體頂點位置的坐標變換,它還可能包含頂點法線、紋理坐標等的坐標變換),并根據場景中光源和物體表面的材質對物體頂點應用不同類型的光照效果。還有其他一些比較重要的任務,如裁剪和視口縮放也在第一階段進行。第二階段稱為光柵化處理階段,Direct3D將經過T&L處理的頂點組織以點、線、面為基礎的圖元,應用紋理貼圖和物體頂點的顏色屬性,根據相應渲染狀態設置(如著色模式),決定每個像素的最終顏色值,并在屏幕上顯示出來。

有時根據特殊的需要,可以跳過其中的某些步驟。如果愿意,也可以提供自己的坐標變換和光照過程,并將處理后的頂點直接傳給Direct3D光柵化處理程序,而繞過Direct3D的T&L階段。

T&L的過程在Direct3D中通常稱為頂點變換流水線,在這個過程中,未經過變換和光照的頂點從一端進入,在內部這些頂點將完成幾個連續操作,然后經過轉換和光照的頂點從另一端出來。應用程序通過指定幾個矩陣、視口以及所使用的光線來建立T&L流水線,然后應用程序將頂點送入流水線,對這些頂點進行變換、照明和裁剪,將其投影到屏幕空間,并根據視口的規定對其進行縮放。我們認為經過流水線的頂點是已經經過處理的,并且已經準備好傳送給光柵化處理程序。

下面首先介紹T&L流水線涉及到的一些基本概念:

(1)世界變換和世界坐標系:物體在三維空間的運動和變形過程稱為世界變換,如平移、旋轉、縮放等。物體在其中運動的三維空間稱為世界空間,它的三維坐標系表示稱為世界坐標系,物體頂點在世界坐標系里的坐標變換稱為世界變換。

(2)取景變換和觀察坐標系:把圖形顯示想象成攝像過程,取景變換就像攝像機中攝像機的擺放一樣,在三維圖形顯示中,需要設置一個虛擬攝像機,屏幕顯示的圖形就是虛擬攝像機拍攝在膠片上的景物。以攝像機位置為參考原點,攝像機觀察的方向為坐標軸,建立的坐標系稱為觀察坐標系,物體在觀察坐標系中的相對坐標稱為觀察坐標,頂點從世界坐標到觀察坐標的轉換稱為取景變換。

(3)投影坐標和投影坐標系:物體從世界坐標描述轉換到觀察坐標后,可將三維物體投影到二維表面上,即投影到虛擬攝像機的膠片上,這個過程就是投影變換。以膠片中心為參考原點的空間坐標系稱為投影坐標系,物體在投影坐標系中的坐標稱為投影坐標。

(4)視區變換和屏幕坐標系:物體在投影坐標系中的表示為浮點坐標,通過定義屏幕顯示區域(一般為顯示窗口大小),將浮點坐標轉化為像素坐標的過程稱為視區變換,該像素坐標值稱為屏幕坐標。例如,如果定義視區大小為寬640像素、高480像素,那么投影坐標(1.0f, 0.5f)經過視區變換后的屏幕坐標為(640, 240),如果定義視區大小為寬1024像素、高800像素,經過視區變換后的屏幕坐標為(1204, 400)。

世界空間的三維物體頂點坐標經過世界變換、取景變換、投影變換和視區變換,轉化為以像素為單位的屏幕坐標,就可以進行光柵化顯示了。在Direct3D程序中,只要定義并設置好相應的變換矩陣和視區信息,即構建好T&L流水線,剩余的各種頂點變換操作由Direct3D自動完成。

 IDirect3DDevice9::SetTransform()函數用來設置頂點變換矩陣,該函數的聲明如下:

Sets a single device transformation-related state.

HRESULT SetTransform(
D3DTRANSFORMSTATETYPE State,
CONST D3DMATRIX * pMatrix
);

Parameters

State
[in] Device-state variable that is being modified. This parameter can be any member of the D3DTRANSFORMSTATETYPE enumerated type, or the D3DTS_WORLDMATRIX macro.
pMatrix
[in] Pointer to a D3DMATRIX structure that modifies the current transformation.

Return Values

If the method succeeds, the return value is D3D_OK. D3DERR_INVALIDCALL is returned if one of the arguments is invalid.

D3DTRANSFORMSTATETYPE

Defines constants that describe transformation state values.

typedef enum D3DTRANSFORMSTATETYPE
{
D3DTS_VIEW = 2,
D3DTS_PROJECTION = 3,
D3DTS_TEXTURE0 = 16,
D3DTS_TEXTURE1 = 17,
D3DTS_TEXTURE2 = 18,
D3DTS_TEXTURE3 = 19,
D3DTS_TEXTURE4 = 20,
D3DTS_TEXTURE5 = 21,
D3DTS_TEXTURE6 = 22,
D3DTS_TEXTURE7 = 23,
D3DTS_FORCE_DWORD = 0x7fffffff,
} D3DTRANSFORMSTATETYPE, *LPD3DTRANSFORMSTATETYPE;

Constants

D3DTS_VIEW
Identifies the transformation matrix being set as the view transformation matrix. The default value is NULL (the identity matrix).
D3DTS_PROJECTION
Identifies the transformation matrix being set as the projection transformation matrix. The default value is NULL (the identity matrix).
D3DTS_TEXTURE0
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE1
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE2
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE3
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE4
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE5
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE6
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_TEXTURE7
Identifies the transformation matrix being set for the specified texture stage.
D3DTS_FORCE_DWORD
Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

Remarks

The transform states in the range 256 through 511 are reserved to store up to 256 world matrices that can be indexed using the D3DTS_WORLDMATRIX and D3DTS_WORLD macros.

Macros  
D3DTS_WORLD Equivalent to D3DTS_WORLDMATRIX(0).
D3DTS_WORLDMATRIX (index) Identifies the transform matrix to set for the world matrix at index. Multiple world matrices are used only for vertex blending. Otherwise only D3DTS_WORLD is used.


IDirect3DDevice9::SetViewport()函數用來設置視區信息,該函數聲明如下:

Sets the viewport parameters for the device.

HRESULT SetViewport(
CONST D3DVIEWPORT9 * pViewport
);

Parameters

pViewport
[in] Pointer to a D3DVIEWPORT9 structure, specifying the viewport parameters to set.

Return Values

If the method succeeds, the return value is D3D_OK. If the method fails, it will return D3DERR_INVALIDCALL. This will happen if pViewport is invalid, or if pViewport describes a region that cannot exist within the render target surface.

Remarks

Direct3D sets the following default values for the viewport.

D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = RenderTarget.Width;
vp.Height = RenderTarget.Height;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;

IDirect3DDevice9::SetViewport can be used to draw on part of the screen. Make sure to call it before any geometry is drawn so the viewport settings will take effect.

To draw multiple views within a scene, repeat the IDirect3DDevice9::SetViewport and draw geometry sequence for each view.


posted on 2008-05-02 09:35 lovedday 閱讀(2477) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线热播精品免费99热| 极品少妇一区二区| 伊人婷婷欧美激情| 激情五月婷婷综合| 亚洲欧洲精品成人久久奇米网 | 欧美三区在线视频| 免费观看在线综合| 免费短视频成人日韩| 噜噜噜91成人网| 麻豆精品在线观看| 欧美一站二站| 久久精品人人做人人综合| 欧美一区二区三区在线看| 亚洲午夜精品久久久久久app| 亚洲六月丁香色婷婷综合久久| 亚洲黄色一区二区三区| 亚洲三级电影在线观看| 日韩视频一区二区三区在线播放 | 国产亚洲成精品久久| 国产亚洲人成网站在线观看| 国产一区二区三区无遮挡| 尤物yw午夜国产精品视频明星| 极品av少妇一区二区| 亚洲黄色三级| 亚洲女爱视频在线| 欧美中文在线字幕| 欧美xx视频| 亚洲国产成人91精品| 99精品欧美一区| 久久精品30| 欧美日韩视频第一区| 国产亚洲精品激情久久| 亚洲国产国产亚洲一二三| 国产主播精品在线| 亚洲视频在线观看三级| 久久影院午夜片一区| 亚洲精品乱码久久久久久黑人 | 国产精品盗摄久久久| 国产日韩欧美精品| 亚洲国产一区二区三区青草影视| 99pao成人国产永久免费视频| 亚洲男人av电影| 亚洲精品日韩在线| 亚洲在线视频网站| 欧美大秀在线观看| 亚洲欧美变态国产另类| 另类欧美日韩国产在线| 国产精品高潮在线| 黄网动漫久久久| 国产精品99久久久久久宅男| 免费精品视频| 欧美亚洲尤物久久| 欧美视频日韩视频| 亚洲欧洲视频| 久久aⅴ国产紧身牛仔裤| 久久人人97超碰精品888| 一本色道88久久加勒比精品| 久久青草欧美一区二区三区| 国产欧美精品在线播放| 亚洲香蕉伊综合在人在线视看| 久色成人在线| 性色av一区二区三区在线观看| 欧美精品一区在线观看| 91久久久在线| 91久久久一线二线三线品牌| 久久久精品999| 亚洲制服少妇| 国产精品久久久一区二区| 亚洲美女av黄| 看欧美日韩国产| 亚洲日本成人网| 欧美大尺度在线| 亚洲电影在线播放| 久久免费国产精品| 欧美专区18| 国内精品久久久久久久影视蜜臀| 欧美一级欧美一级在线播放| 欧美激情女人20p| 中文在线资源观看网站视频免费不卡 | 一本久道久久久| 亚洲人成网站在线观看播放| 亚洲欧美日韩精品综合在线观看| 六月天综合网| 亚洲日本成人网| 亚洲国产精品美女| 欧美精品1区| 亚洲伦理在线| 日韩网站免费观看| 国产精品久久久久久久免费软件| 亚洲免费在线观看| 欧美一区二粉嫩精品国产一线天| 国产视频一区三区| 久久欧美中文字幕| 免费高清在线视频一区·| 亚洲精品永久免费精品| 日韩视频免费观看高清在线视频| 欧美日韩美女在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美日韩精品一区二区| 国外成人在线| 美女亚洲精品| 欧美日本国产视频| 欧美专区在线观看一区| 开心色5月久久精品| 亚洲美洲欧洲综合国产一区| 亚洲精品三级| 久久综合电影| 亚洲三级免费观看| 国产精品99久久99久久久二8 | 一区二区三区色| 性欧美videos另类喷潮| 久热精品在线视频| 亚洲午夜av| 久久久久99精品国产片| 亚洲精品日产精品乱码不卡| 午夜精品久久久久影视 | 欧美日韩精品二区| 久久久久一区二区三区| 久久精品亚洲精品国产欧美kt∨| 在线国产精品一区| 在线一区二区视频| 亚洲成人在线网站| 亚洲网在线观看| 亚洲人成在线观看| 欧美一区成人| 亚洲性人人天天夜夜摸| 久久久久久一区二区| 亚洲午夜在线观看视频在线| 久久蜜桃香蕉精品一区二区三区| 亚洲国产高潮在线观看| 午夜激情久久久| 亚洲视频日本| 欧美丰满少妇xxxbbb| 可以看av的网站久久看| 国产精品久久久久久久久免费樱桃 | 欧美一级二区| 亚洲欧美中文字幕| 欧美视频免费| 亚洲激情亚洲| 亚洲国产综合91精品麻豆| 久久av一区二区三区漫画| 亚洲午夜性刺激影院| 亚洲欧美久久| 亚洲一区二区黄| 欧美日韩精品综合在线| 亚洲国产精品成人一区二区| 午夜精品短视频| 夜夜夜久久久| 欧美亚洲一区二区在线| 亚洲女人小视频在线观看| 欧美日韩一区综合| 亚洲日本成人| 亚洲欧美国产高清| 国产精品亚洲产品| 欧美一区二区三区免费观看视频| 亚洲欧美久久久| 国内视频精品| 欧美激情综合| 亚洲视频视频在线| 久久精品91| 亚洲人成高清| 国产精品久久久久久久久久久久久| 午夜精品一区二区三区在线视 | 国产一区二区三区高清| 久久久久久久综合日本| 欧美激情中文不卡| 亚洲一区二区三区高清| 美女视频黄免费的久久| 久久婷婷av| 亚洲午夜国产成人av电影男同| 国产精品日日做人人爱| 久久久噜噜噜久久狠狠50岁| 亚洲毛片av| 久久综合九色综合久99| 在线亚洲精品| 亚洲国产cao| 国产精品亚洲精品| 免费在线视频一区| 午夜久久久久久久久久一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲无线一线二线三线区别av| 伊人激情综合| 国产日韩欧美二区| 国产精品第十页| 欧美激情一区二区三区在线| 欧美在线观看一区| 亚洲性图久久| 亚洲图片欧洲图片av| 亚洲国产专区校园欧美| 久久中文字幕一区二区三区| 欧美一区二区视频网站| 亚洲男女毛片无遮挡|