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

天行健 君子當自強而不息

頂點坐標變換(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>
            亚洲第一黄色| 国产乱码精品一区二区三区忘忧草 | 裸体素人女欧美日韩| 欧美亚洲尤物久久| 久久国产精品亚洲77777| 久热re这里精品视频在线6| 欧美国产第一页| 日韩视频在线观看免费| 亚洲伦理在线免费看| 欧美精品成人91久久久久久久| 亚洲精品国产拍免费91在线| 亚洲毛片视频| 亚洲婷婷在线| 久久久久成人精品| 欧美激情在线免费观看| 国产欧美日韩不卡免费| 激情婷婷久久| 一本久道综合久久精品| 亚洲精品老司机| 亚洲一级黄色片| 老司机午夜精品视频| 国产一区二区在线观看免费播放| 你懂的网址国产 欧美| 久久亚洲精品网站| 久久综合色婷婷| 中文日韩电影网站| 羞羞视频在线观看欧美| 模特精品裸拍一区| 国产精品私拍pans大尺度在线| 国模套图日韩精品一区二区| 亚洲精品一区在线观看| 午夜精品福利一区二区三区av| 免费永久网站黄欧美| 亚洲综合精品一区二区| 欧美激情视频一区二区三区免费 | 亚洲老板91色精品久久| 午夜免费久久久久| 亚洲国产一区二区精品专区| 小嫩嫩精品导航| 欧美日韩三区| 亚洲人成精品久久久久| 久久深夜福利| 亚洲综合另类| 国产精品成人一区| 99re6这里只有精品| 久久综合国产精品台湾中文娱乐网| 夜夜嗨av一区二区三区四季av| 老司机67194精品线观看| 国产欧美一区在线| 在线视频欧美日韩| 亚洲人成人一区二区三区| 久久久久国产一区二区三区| 欧美性色视频在线| 亚洲调教视频在线观看| 亚洲日本中文字幕| 欧美国产日韩一区二区| 亚洲国产精品黑人久久久| 久热成人在线视频| 久久蜜桃香蕉精品一区二区三区| 国产在线观看91精品一区| 久久久91精品国产| 久久精品夜色噜噜亚洲aⅴ| 国产一区二区成人| 久久久国产视频91| 久久久亚洲欧洲日产国码αv| 国产永久精品大片wwwapp| 午夜免费久久久久| 最新日韩精品| 亚洲国产mv| 欧美成人网在线| 亚洲精品国产精品乱码不99| 亚洲成色777777在线观看影院| 免费短视频成人日韩| 亚洲精品久久久久久下一站| 亚洲精品系列| 国产女人18毛片水18精品| 久久午夜精品| 欧美激情一二区| 亚洲欧美日韩国产一区二区三区 | 久久夜色精品一区| 久久综合影音| 一区二区三区成人精品| 亚洲资源av| 在线看片成人| 亚洲精品小视频在线观看| 国产精品一区二区三区久久| 久久久久久日产精品| 欧美高清在线播放| 欧美一级黄色网| 免费成人在线视频网站| 亚洲欧美精品伊人久久| 久久久久久欧美| 亚洲一区bb| 久久综合伊人77777尤物| 亚洲素人在线| 久久久午夜精品| 亚洲免费在线精品一区| 久久性天堂网| 亚洲欧美国产一区二区三区| 久久精品一二三| 亚洲视频图片小说| 久久午夜激情| 亚洲欧美综合另类中字| 欧美成人一区二区三区在线观看| 亚洲一区二区在线免费观看视频| 欧美诱惑福利视频| 亚洲午夜在线视频| 免费在线播放第一区高清av| 羞羞答答国产精品www一本| 欧美激情1区| 久热综合在线亚洲精品| 国产精品久久婷婷六月丁香| 亚洲第一精品福利| 黄色亚洲精品| 亚洲综合日韩在线| 亚洲午夜伦理| 欧美日本高清一区| 欧美成人国产va精品日本一级| 国产精品免费网站在线观看| 亚洲国产欧美日韩| 亚洲高清在线观看| 欧美制服丝袜| 久久九九精品| 国产日韩在线一区| 亚洲女女做受ⅹxx高潮| 亚洲欧美不卡| 国产精品久久久久一区二区| 亚洲美女av黄| 亚洲视频免费在线观看| 国产精品网站在线观看| 夜夜夜久久久| 欧美第一黄网免费网站| 欧美成人精品在线播放| 精品二区视频| 久久综合久久88| 蜜臀va亚洲va欧美va天堂| 国产一区二区三区免费在线观看| 亚洲自拍三区| 久久精品视频播放| 国产亚洲毛片在线| 久久国产精品一区二区三区四区| 欧美一区不卡| 韩日精品在线| 久久综合久久综合久久| 免费欧美在线| 日韩亚洲在线观看| 欧美午夜在线观看| 亚洲神马久久| 久久av免费一区| 国外成人在线| 欧美大片免费看| 一区二区三区国产精品| 午夜天堂精品久久久久| 国产亚洲欧美激情| 免费日韩精品中文字幕视频在线| 亚洲国产精品久久久久秋霞不卡 | 欧美黄色影院| 在线亚洲一区二区| 国产精品嫩草久久久久| 久久av红桃一区二区小说| 欧美成人精品h版在线观看| 亚洲日本视频| 国产精品视频精品| 久久久精品国产99久久精品芒果| 亚洲盗摄视频| 亚洲你懂的在线视频| 国产在线精品一区二区中文| 麻豆成人在线观看| 日韩一级免费观看| 久久国产免费| 亚洲人成网站影音先锋播放| 欧美色偷偷大香| 久久久久高清| 亚洲免费高清| 久久视频在线免费观看| 99精品欧美一区| 国产一区二区三区不卡在线观看| 狂野欧美性猛交xxxx巴西| 中文国产成人精品| 亚洲成色精品| 欧美在线观看网址综合| 亚洲精品久久久蜜桃| 国产婷婷一区二区| 欧美日本国产视频| 久久久久久亚洲精品中文字幕 | 一本色道久久88精品综合| 国内一区二区在线视频观看| 欧美日韩精品一区视频| 久久日韩精品| 欧美夜福利tv在线| 亚洲视频中文| 亚洲毛片在线看| 欧美国产日本| 久久综合久久美利坚合众国| 亚洲欧美国产一区二区三区| 国产午夜亚洲精品不卡| 亚洲黄一区二区三区| 午夜久久美女| 亚洲黄页视频免费观看| 国产一区二区三区四区五区美女|