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

李錦俊(mybios)的blog

游戲開發(fā) C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用鏈接

留言簿(16)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 373303
  • 排名 - 67

最新評論

閱讀排行榜

評論排行榜

頂點聲明


從概念上講,頂點聲明是對頂點直接內存訪問(DMA)以及圖形流水線的 tessellator 引擎進行編程的一種方法。頂點聲明簡要地表示了數據的布局及 tessellator 操作。為了解決Microsoft? DirectX? 8.x中頂點聲明的復雜性和可擴展性,9.0版引入了用來表示頂點數據流的新格式。

頂點著色器和頂點聲明不再是在CreateVertexShader的時候綁定在一起。對著色器的驗證已經被分成兩部分,一部分在頂點著色器創(chuàng)建時執(zhí)行,另一部分在DrawPrimitive時執(zhí)行。頂點著色器和頂點聲明都由相應的對象表示。

Decls 不再用DWORD流表示。它們現在用一個D3DVERTEXELEMENT9結構的數組表示。數組中的每個元素描述一個頂點元素。

另外,為了解決API的可用性問題,9.0版增加了一個與SetVertexDeclaration調用等價的SetFVF調用。這是一個有用的函數,當調用這個函數時,新的FVF會取代當前的頂點聲明,反之亦然。如果驅動程序是DirectX 8.0之前的版本(NumStream為0),那么對于那些不能被轉換成彈性頂點格式(FVF)的頂點聲明,SetVertexDeclaration可能會失敗并返回錯誤碼。SetFVF既能用于固定功能頂點流水線,又能用于可編程頂點流水線。在內部,系統(tǒng)會根據把FVF映射到DirectX 9.0中的Decl中定義的規(guī)則,把FVF碼轉換為頂點著色器聲明。在編寫頂點著色器函數中的DCL命令時,應該緊記這一點。因為這個轉換的關系,所有后面的討論將僅限于頂點聲明。

D3DVERTEXELEMENT9結構

以下是D3DVERTEXELEMENT9結構中的域以及說明。

  • Stream(數據流) - 數據流的編號,當前域會從該編號的數據流中讀取。
  • Offset(偏移量) - 偏移量,表示當前域從哪里開始讀取,以字節(jié)為單位。
  • Type(類型) - 輸入數據的類型,以及數據在傳入頂點著色器的寄存器時如何轉換格式,也就是,float1,float2,short2n等等。輸出的類型由方法決定,有些方法有隱式的輸入類型。
  • Method(方法) - 將由tessellator(或任何程序化的幾何函數)對指定的輸入執(zhí)行的任何預定義操作。
    • D3DDECLMETHOD_DEFAULT: 當使用tessellator時,這個元素被插值或復制到頂點處理器的輸入寄存器中。這個操作的輸入可以是任何類型。這個操作的輸出類型與輸入相同。
    • D3DDECLMETHOD_PARTIALU: 計算rectangular patch(R-patch)上某一點在U方向上的正切值。這個操作的輸入類型可以是D3DDECLTYPE_FLOAT[43],D3DDECLTYPE_D3DCOLOR,D3DDECLTYPE_UBYTE4,或D3DDECLTYPE_SHORT4。這個操作的輸出類型總是D3DDECLTYPE_FLOAT3。
    • D3DDECLMETHOD_PARTIALV: 計算R-patch上某一點在V方向上的正切值。這個操作的輸入類型可以是D3DDECLTYPE_FLOAT[43],D3DDECLTYPE_D3DCOLOR,D3DDECLTYPE_UBYTE4,D3DDECLTYPE_SHORT4。這個操作的輸出類型總是D3DDECLTYPE_FLOAT3。
    • D3DDECLMETHOD_CROSSUV: 通過求兩個正切值的叉積計算rect/tri patches(RT-patch)上某一點的法向。這個操作的輸入類型可以是D3DDECLTYPE_FLOAT[43],D3DDECLTYPE_D3DCOLOR,D3DDECLTYPE_UBYTE4,或D3DDECLTYPE_SHORT4。這個操作的輸出類型總是D3DDECLTYPE_FLOAT3。
    • D3DDECLMETHOD_UV: 復制RT-patch上某一點的U,V值,產生一個二維浮點數。這個操作的輸入類型必須被設為D3DDECLTYPE_UNUSED。這個操作的輸出類型總是D3DDECLTYPE_FLOAT2。輸入數據流和偏移量也沒有用到(但必須被設為0)。
    • D3DDECLMETHOD_LOOKUP: 查找一個位移貼圖。輸入類型可以是D3DDECLTYPE_FLOAT[234]。只有.x和.y成員被用于紋理貼圖查找。這個操作的輸出類型總是D3DDECLTYPE_FLOAT4。只有設備支持位移貼圖時才能使用這個方法。這個方法只能和D3DDECLUSAGE_SAMPLE一起使用。
    • D3DDECLMETHOD_LOOKUPPRESAMPLED: 查找一個預取樣的位移貼圖。輸入類型、流索引值和流偏移量都沒有用到(類型必須被設為D3DDECLTYPE_UNUSED,數據流和偏移量必須被設為0)。這個操作的輸出類型總是D3DDECLTYPE_FLOAT4。只有設備支持位移貼圖時才能使用這個方法。這個方法只能和D3DDECLUSAGE_SAMPLE一起使用。
  • Semantic Type(語義類型) - 元素的用途。例如,是否是一個法向量?這對N-patches很有用,并能極大地增強各種數據布局和頂點著色器間的互操作性。TEXCOORDS語義可被用作用戶定義的域(Microsoft? Direct3D?沒有為這些域定義現成的語義)。一般來說語義是一種把頂點聲明和頂點著色器綁定在一起的機制,但是在某種情況下,它們有特殊的解釋。例如,N-patch tessellator用一個含有NORMAL和POSITION語義的元素來設置tessellation。

以下這些都是允許的。

語義,用途索引

特殊解釋

(D3DDECLUSAGE_POSITION, 0 )

固定功能著色器和N-patch中未經變換的位置。

(D3DDECLUSAGE_POSITION, 1)

固定功能著色器中用于蒙皮的未經變換的位置。

(D3DDECLUSAGE_BLENDWEIGHT, 0)

在固定功能頂點著色器中的混合加權。

(D3DDECLUSAGE_BLENDINDICES, 0)

固定功能頂點著色器中indexed paletted skinning的矩陣索引

(D3DDECLUSAGE_NORMAL, 0)

固定功能頂點著色器和N-patch tessellator中的頂點法向

(D3DDECLUSAGE_NORMAL, 1)

固定功能頂點著色器中用于蒙皮的頂點法向。

(D3DDECLUSAGE_PSIZE, 0)

為實現point sprite功能,給光柵化器的設置引擎使用的點的大小屬性,用來把一個點擴展成一個四邊形。

(D3DDECLUSAGE_TEXCOORD, n)

固定功能頂點著色器和3.0版以前的像素著色器中的紋理坐標。可以用來傳遞用戶定義的數據。

(D3DDECLUSAGE_TANGENT, n)

正切值。沒有特別的解釋。

(D3DDECLUSAGE_BINORMAL, n)

副法線(Binormal)。沒有特別的解釋。

(D3DDECLUSAGE_TESSFACTOR, 0)

tessellation單元中使用的tessellation因子,用來控制tessellation比率。

(D3DDECLUSAGE_POSITIONT, 0)

變換后的位置。當設置了包含該語義的聲明時,頂點處理會被跳過。

(D3DDECLUSAGE_COLOR, 0)

固定功能頂點著色器和3.0版以前的像素著色器中的漫反射色。

(D3DDECLUSAGE_COLOR, 1)

固定功能頂點著色器和3.0版以前的像素著色器中的鏡面反射色。

(D3DDECLUSAGE_FOG, 0)

當設置了3.0版以前的像素著色器時,在像素著色器處理之后使用的霧混合值。

(D3DDECLUSAGE_DEPTH, n)

深度。沒有特別的解釋。

(D3DDECLUSAGE_SAMPLE, n)

查找得到的位移值。只能和D3DDECLMETHOD_LOOKUP或D3DDECLMETHOD_LOOKUPPRESAPLED一起使用。

有一個特殊的頂點元素值被視為頂點著色器聲明的結束。這個值是#define D3DDECL_END() {0xFF,0,0,0,0,0}。

UsageIndex Usage連用用來指定一個頂點元素的語義。現在用戶可以指定Usage為D3DDECLUSAGE_POSITION以及UsageIndex = 1,而不是像Microsoft DirectX? 8.x中那樣使用D3DVSDE_POSITION2。

一個Decl指定tessellator引擎(或者萬一沒有使用tessellator引擎的話,就直接是頂點處理引擎,)的輸入和輸出,頂點元素中的類型域指定輸入到decl的數據類型。輸出類型由方法隱式決定。

頂點著色器中有如下形式的前綴{semantic, semantic index, register number}。運行庫會把聲明的語義與著色器的語義信息進行匹配,這樣就把輸入寄存器和數據流中的字節(jié)偏移量配成一對。

FVF 映射到 DirectX 9.0 Decl

FVF

數據類型

用途

用途索引

D3DFVF_XYZ

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_POSITION

0

D3DFVF_XYZRHW

D3DDECLTYPE_FLOAT4

D3DDECLUSAGE_POSITIONT

0

D3DFVF_XYZW

D3DDECLTYPE_FLOAT4

D3DDECLUSAGE_POSITION

0

D3DFVF_XYZB5 and D3DFVF_LASTBETA_UBYTE4

D3DVSDT_FLOAT3

D3DVSDT_FLOAT4

D3DVSDT_UBYTE4

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_XYZB5 and D3DFVF_LASTBETA_D3DCOLOR

D3DVSDT_FLOAT3

D3DVSDT_FLOAT4

D3DVSDT_D3DCOLOR

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_XYZB5

D3DDECLTYPE_FLOAT3

D3DDECLTYPE_FLOAT4

D3DDECLTYPE_FLOAT1

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_XYZBn (n=1..4)

D3DDECLTYPE_FLOAT3

D3DDECLTYPE_FLOATn

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

0

D3DFVF_XYZBn (n=1..4) and D3DFVF_LASTBETA_UBYTE4

D3DDECLTYPE_FLOAT3

D3DDECLTYPE_FLOAT(n-1)

D3DDECLTYPE_UBYTE4

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_XYZBn (n=1..4) and D3DFVF_LASTBETA_D3DCOLOR

D3DDECLTYPE_FLOAT3

D3DDECLTYPE_FLOAT(n-1)

D3DDECLTYPE_D3DCOLOR

D3DDECLUSAGE_POSITION

D3DDECLUSAGE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_NORMAL

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_NORMAL

0

D3DFVF_PSIZE

D3DDECLTYPE_FLOAT1

D3DDECLUSAGE_PSIZE

0

D3DFVF_DIFFUSE

D3DDECLTYPE_D3DCOLOR

D3DDECLUSAGE_COLOR

0

D3DFVF_SPECULAR

D3DDECLTYPE_D3DCOLOR

D3DDECLUSAGE_COLOR

1

D3DFVF_TEXCOORDSIZEm(n)

D3DDECLTYPE_FLOATm

D3DDECLUSAGE_TEXCOORD

n

使用了 D3DDECLUSAGE_POSITIONT 的頂點聲明

?(D3DUSAGE_POSITIONT, 0)頂點元素的存在用來告訴設備輸入的頂點數據已經經過了頂點處理(和FVF中設置了D3DFVF_XYZRHW位相似)。在繪制時,如果當前設置的頂點聲明中的某一元素具有(D3DUSAGE_POSITIONT, 0)語義,那么整個頂點處理會被略過(就和FVF中設置了D3DFVF_XYZRHW位相似)。

使用(D3DDECLUSAGE_POSITIONT, 0)的頂點聲明有一些限制:

  • 此類聲明中只能使用數據流零。
  • 頂點元素必須以偏移量遞增的方式存儲。
  • 數據流中的偏移量必須對齊到 DWORD
  • 一對相同的(用途,用途索引)只能出現一次。
  • 只能使用D3DDECLMETHOD_DEFAULT方法。
  • 其余頂點元素不能具有(D3DDECLUSAGE_POSITION, 0)語義。

此外,此類聲明還有一些與驅動程序版本有關的限制。這些限制的存在是因為Direct3D直接把此類聲明傳送給驅動程序而沒有做任何轉換。

DirectX 9.0 之前的驅動程序

  • 輸入的聲明必須可以被翻譯成一個有效的 FVF (頂點元素及其數據類型具有相同的順序)。
  • 紋理坐標間不允許有間隔。這意味著如果有一個 (D3DDECLUSAGE_TEXCOORD, n) 頂點元素,那么同時也應該有一個 (D3DDECLUSAGE_TEXCOORD, n-1) 頂點元素。

不支持 3.0 版本像素著色器的 DirectX 9.0 驅動程序

  • 輸入的聲明必須可以被翻譯成一個有效的 FVF (頂點元素及其數據類型具有相同的順序)。
  • 紋理坐標間不允許有間隔。

支持 3.0 版本像素著色器的 DirectX 9.0 驅動程序

允許更通用的聲明。

  • 頂點元素的順序可以任意排列,可以使用任何數據類型。
  • 如果設備設置了 D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 能力位,那么多個頂點元素可以在共享相同的數據流偏移量的同時具有不同的類型。

未使用 D3DDECLUSAGE_POSITIONT 的頂點聲明

運行庫會在創(chuàng)建聲明時進行驗證。以下是一些通用的規(guī)則,用來判斷聲明的合法性。

  • 數據流中所有的頂點元素必須是連續(xù)的,并按偏移量排序。
  • 數據流偏移量必須對齊到 DWORD
  • 一對相同的(用途,用途索引)只能出現一次。
  • 如果設置了 D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 能力位,那么頂點元素可以:
    • 多個頂點元素可以共享數據流中相同的偏移量。
    • 它們可以是不同的類型,從而有不同的大小。
    • 它們可以任意地重疊。例如,一個元素在數據流中的起始位置可以同時位于另一個元素的中間。
    • 頂點元素的數據流偏移量的順序可以是任意的。
  • 頂點元素的數量不能大于 64
  • UsageIndex 應該在 [0-15] 范圍內。
  • 用于 DrawPrimitive API 的聲明,不應該包含除了 D3DDECLMETHOD_DEFAULT, D3DDECLMETHOD_LOOKUPPRESAMPLED D3DDECLMETHOD_LOOKUP 之外的頂點元素。
  • 包含 D3DDECLMETHOD_LOOKUP LOOKUPPRESAMPLED 的頂點聲明,應該只用于可編程頂點流水線。
  • 用于 DrawRectPatch/DrawTriPatch API 的聲明,不能包含 D3DDECLMETHOD_LOOKUPPRESAMPLED D3DDECLMETHOD_LOOKUP 頂點元素。
  • 聲明只能有一個使用 D3DDECLMETHOD_LOOKUP D3DDECLMETHOD_LOOKUPPRESAMPLED 方法的元素。
  • 使用了 D3DDECLMETHOD_LOOKUP D3DDECLMETHOD_LOOKUPPRESAMPLED 的聲明不應該使用 D3DDECLMETHOD_DEFAULT 之外的元素,因為位移貼圖只對 N-patches 進行。
  • 使用了 D3DDECLMETHOD_LOOKUP D3DDECLMETHOD_LOOKUPPRESAMPLED 的頂點元素只能和 (D3DDECLUSAGE_SAMPLE, n) 一起使用,反之亦然。
  • 如果一個使用了 D3DDECLMETHOD_LOOKUP 方法的頂點元素的數據流索引和偏移量與現有的頂點元素相同,那么該頂點元素也應該具有相同的數據類型。
  • 使用了 D3DDECLMETHOD_LOOKUP 方法的頂點元素應該具有 D3DDECLTYPE_FLOAT2/3/4 數據類型。
  • 使用了 D3DDECLMETHOD_CROSSUV, D3DDECLMETHOD_PARTIALU D3DDECLMETHOD_PARTIALV 的頂點元素應該具有兼容的數據類型。
  • 使用了 D3DDECLMETHOD_UV D3DDECLMETHOD_LOOKUPPRESAMPLED 的頂點元素的類型必須是 D3DDECLTYPE_UNUSED ,數據流索引和偏移量必須為 0
  • 使用了 D3DDECLMETHOD_UV, D3DDECLMETHOD_PARTIALU D3DDECLMETHOD_PARTIALV 方法的聲明只能用于 DrawRectPath
  • 用途 D3DDECLUSAGE_TESSFACTOR 只能和數據類型 D3DDECLTYPE_FLOAT1 及用途索引 0 一起使用。
  • 把一個聲明用于 tessellation DrawRectPatch , DrawTriPatch, N-patches )時,數據類型必須小于或等于 D3DDECLTYPE_SHORT4
  • 如果聲明包含的方法需要特定的設備能力(例如,位移貼圖, RT-patches ),那么只有當設備支持這些能力時才能創(chuàng)建。
  • 用于繪制點和線的頂點聲明,不能使用除了 D3DDECLMETHOD_DEFAULT 之外的方法。
  • 可以創(chuàng)建哪些聲明還取決于驅動程序的能力。

用于可編程頂點流水線

  • 在繪制時 Direct3D 會在當前頂點聲明和當前頂點著色器函數中查找相同的“用途 用途索引”組合。如果找到,那么著色器函數 DCL 中的寄存器會被用作頂點元素的目的寄存器。
  • 如果當前頂點聲明中的某個頂點元素的用途未能在當前頂點著色器中找到,那么該頂點元素就被忽略。
  • 當使用版本 2.0 以下的頂點著色器時,在著色器代碼中用到的所有語義,必須存在于在繪制時與之綁定的聲明中。當使用版本 2.0 及以上的頂點著色器時,不存在這種限制,這使應用程序可以把同一個頂點著色器和不同的頂點聲明一起使用。當頂點著色器根據靜態(tài)條件讀取輸入數據時,這是有用的。因為這個原因而未被初始化的頂點著色器寄存器會包含未定義的值。

當在一個DirectX 8.x驅動程序上使用硬件頂點處理時,還有其它的限制:

  • 頂點元素不能重疊或共享相同的偏移量。
  • 只能使用 DirectX 8.x 驅動程序能夠理解的數據類型。

如果提供的聲明無法被轉換為DirectX 8.x風格的聲明,那么CreateVertexDeclaration可能會失敗。對混合模式設備來說,這種失敗會發(fā)生在Draw*時刻,因為只有這時候才能知道著色器是被用于硬件還是軟件頂點處理。

用于固定功能頂點流水線

只能使用符合以下規(guī)則的聲明:

  • 頂點元素之間不能有間隔(固定功能流水線使用了 DirectX 8.x 聲明,而 SKIP DirectX 8.x 聲明中是不允許的)
  • 必須指定 (D3DDECLUSAGE_POSITION, 0) 語義,并且具有 D3DDECLTYPE_FLOAT3 數據類型。
  • 使用了 D3DDECLMETHOD_UV 方法的頂點元素必須指定 D3DDECLUSAGE_TEXCOORD D3DDECLUSAGE_BLENDWEIGHT 用途。
  • 使用了 D3DDECLMETHOD_PARTIALU, D3DDECLMETHOD_PARTIALV D3DDECLMETHOD_CROSSUV 的頂點元素只能和這些用途一起使用: D3DDECLUSAGE_POSITION, D3DDECLUSAGE_NORMAL, D3DDECLUSAGE_BLENDWIEGHT D3DDECLUSAGE_TEXCOORD ,并且輸入類型必須是 D3DDECLTYPE_FLOAT3

當聲明和DirectX 8.x驅動程序的硬件頂點處理一起使用時,Direct3D運行庫會根據以下規(guī)則把它轉換為DirectX 8.x風格的聲明。

  • 頂點元素不能共享數據流中相同的偏移量,并且不能重疊。
  • 數據類型必須小于或等于 D3DDECLTYPE_SHORT4
  • 只允許以下這些方法: D3DDECLMETHOD_DEFAULT, D3DDECLMETHOD_CROSSUV, D3DDECLMETHOD_UV
  • 根據 DirectX 9.0聲明映射到DirectX 8.x聲明 Usage UsageIndex 轉換到寄存器值。
  • DirectX 9.0聲明映射到DirectX 8.x聲明 列出了哪些 DirectX 9.0 語義可以被轉換到 DirectX 8.x 風格的聲明。
  • 如果聲明中有 n 個頂點元素,其中元素 0 - m (m < n) 可以映射到 FVF DirectX 9.0聲明映射到FVF 中描述的元素),但元素 m+1 不可以,那么:
    • 如果 m+2 n-1 之間的任何一個頂點元素可以映射到 FVF/dx8decl ,那么聲明就是無效的。
    • 根據 DirectX 9.0聲明映射到FVF ,對元素 0 m 進行轉換(由 DirectX 8.0 運行庫和舊的驅動程序,以及 DirectX 9.0 驅動程序執(zhí)行)。 m+1, m+2 直到 n-1 被映射到連續(xù)的 texcoord (k), texcoord(k+1) k 為元素 0 – m 之間的 texcoord (的數量)。
    • 映射后的 texcoord 的數據類型會是 float[1234] ,取代當前元素原來的數據類型(但大小是相同的)。因此即使現有的數據類型沒有被包括在 DirectX 9.0聲明映射到FVF 中,也沒有關系。
    • 如果 k 到達 8 ,那么聲明對 FVF/dx8decl 來說就是無效的。
    • 如果存在任何到 texcoord 的映射,那么除了 DEFAULT 方法,整個聲明不能包含使用(紋理)生成方法的元素,否則聲明對 FVF/dx8decl 來說就是無效的。

DirectX 9.0 聲明映射到 DirectX 8.x 聲明

DirectX 9.0 用途

DirectX 9.0 用途索引

DirectX 8.0

D3DDECLUSAGE_POSITION

0

D3DVSDE_POSITION

D3DDECLUSAGE_POSITION

1

D3DVSDE_POSITION2

D3DDECLUSAGE_NORMAL

0

D3DVSDE_NORMAL

D3DDECLUSAGE_NORMAL

1

D3DVSDE_NORMAL2

D3DDECLUSAGE_BLENDWEIGHT

0

D3DVSDE_BLENDWEIGHT

D3DDECLUSAGE_BLENDINDICES

0

D3DVSDE_BLENDINDICES

D3DDECLUSAGE_PSIZE

0

D3DVSDE_PSIZE

D3DDECLUSAGE_COLOR

0

D3DVSDE_DIFFUSE

D3DDECLUSAGE_COLOR

1

D3DVSDE_SPECULAR

D3DDECLUSAGE_TEXCOORD

n

D3DVSDE_TEXCOORDn

當聲明和DirectX 7.0驅動程序上的硬件頂點處理一起使用時,Direct3D運行庫會根據以下規(guī)則把它轉換為FVF。

  • 只能使用數據流 0 (顯然可以從 MaxStreams 設備能力中看出)。
  • 頂點元素的順序應該和 FVF 位的順序相同。
  • 不允許紋理坐標間有間隔。
  • 對所有 DirectX 8.0 之前的驅動程序來說,任何沒有在 DirectX 9.0聲明映射到FVF 中描述的頂點元素不能被轉換為有效的 FVF 碼。因此無法在這些驅動程序中使用。
  • 如果設備沒有設置以下這些能力位: D3DPTEXTURECAPS_PROJECTED D3DPTEXTURECAPS_CUBEMAP ,那么使用了 D3DDECLUSAGE_TEXCOORD 的頂點元素只能用 D3DDECLTYPE_FLOAT2

DirectX 9.0 聲明映射到 FVF

數據類型

用途

用途索引

FVF

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_POSITION

0

D3DFVF_XYZ

D3DDECLTYPE_FLOAT4

D3DDECLUSAGE_POSITIONT

0

D3DFVF_XYZRHW

D3DDECLTYPE_FLOATn

D3DDECLUSAGE_BLENDWEIGHT

0

D3DFVF_XYZBn

D3DDECLTYPE_UBYTE4

D3DDECLUSAGE_BLENDINDICES

0

D3DFVF_XYZB (nWeights+1)

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_NORMAL

0

D3DFVF_NORMAL

D3DDECLTYPE_FLOAT1

D3DDECLUSAGE_PSIZE

0

D3DFVF_PSIZE

D3DDECLTYPE_D3DCOLOR

D3DDECLUSAGE_COLOR

0

D3DFVF_DIFFUSE

D3DDECLTYPE_D3DCOLOR

D3DDECLUSAGE_COLOR

1

D3DFVF_SPECULAR

D3DDECLTYPE_FLOATm

D3DDECLUSAGE_TEXCOORD

n

D3DFVF_TEXCOORDSIZEm(n)

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_POSITION

1

N/A

D3DDECLTYPE_FLOAT3

D3DDECLUSAGE_NORMAL

1

N/A

用于 ProcessVertices 的頂點聲明

頂點聲明可以被用來描述ProcessVertices的輸出。此類聲明應該遵循以下規(guī)則。

  • 只能而且必須使用數據流 0
  • 頂點元素不能共享相同的偏移量或相互重疊。
  • 只允許使用 D3DDECLMETHOD_DEFAULT 方法。
  • 只能使用 D3DDECLTYPE_FLOATn D3DDECLTYPE_D3DCOLOR 數據類型。
  • 使用 (D3DDECLUSAGE_POSITION, 0) (D3DDECLUSAGE_POSITIONT, 0) 的頂點元素不是必需的。
  • 使用 (D3DDECLUSAGE_POSITION, 0) (D3DDECLUSAGE_POSITIONT, 0) 的頂點元素不能在同一個聲明中出現。
  • 當使用此類聲明時,當前頂點著色器的必須是 3.0 及以上版本。

posted on 2006-12-02 16:42 李錦俊(mybios) 閱讀(2757) 評論(0)  編輯 收藏 引用 所屬分類: Direct3D
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美在线播放| 久久www成人_看片免费不卡| 亚洲永久免费精品| 亚洲毛片播放| aa成人免费视频| 亚洲视频精选在线| 欧美一区二区免费观在线| 亚洲午夜一区| 香蕉亚洲视频| 久久久美女艺术照精彩视频福利播放| 老司机成人在线视频| 欧美激情精品久久久久久大尺度| 欧美日韩精品伦理作品在线免费观看| 欧美三日本三级少妇三99| 国产日韩欧美二区| 亚洲欧洲精品一区二区三区不卡 | 国内精品国产成人| 日韩一级精品视频在线观看| 亚洲综合成人婷婷小说| 久久久国产一区二区| 亚洲国产精品尤物yw在线观看 | 一区二区欧美视频| 99这里只有精品| 久久综合给合久久狠狠狠97色69| 亚洲高清一区二| 欧美一区二区三区成人| 欧美日韩国产在线| 一区二区三区在线免费视频| 亚洲网站啪啪| 久久综合五月天婷婷伊人| 一本大道久久精品懂色aⅴ| 久久免费99精品久久久久久| 国产精品家庭影院| 夜久久久久久| 亚洲黄色成人网| 久久精品夜色噜噜亚洲a∨| 国产精品久久久久久久久免费樱桃| 亚洲国产精品福利| 久久躁狠狠躁夜夜爽| 亚洲欧美日韩高清| 国产精品伦子伦免费视频| 日韩午夜在线| 欧美大片在线看| 久久久一区二区三区| 国产婷婷一区二区| 欧美一区二区三区在线| 一区二区久久久久久| 欧美激情在线免费观看| 91久久在线观看| 欧美激情精品久久久久久免费印度 | 久久av免费一区| 在线视频你懂得一区| 欧美老女人xx| 日韩一级二级三级| 亚洲精品国产精品国自产在线| 麻豆国产精品va在线观看不卡| 激情综合亚洲| 欧美成人免费在线| 免费日韩av片| 一本一道久久综合狠狠老精东影业| 欧美激情国产日韩| 欧美激情亚洲| 在线视频精品| 亚洲免费伊人电影在线观看av| 国产乱码精品一区二区三区不卡 | 亚洲自拍高清| 亚洲欧美国产日韩中文字幕| 国产伦精品一区二区三区高清 | 夜夜嗨av一区二区三区| 欧美三级午夜理伦三级中文幕| 中文网丁香综合网| 亚洲欧美在线磁力| 亚洲电影在线看| 亚洲激情视频网| 欧美日韩精品久久久| 午夜精品视频在线| 久久精品亚洲精品| 亚洲精品少妇| 亚洲制服av| 亚洲国产精品成人| 99天天综合性| 国产一区二区三区在线免费观看| 欧美成人免费全部| 国产精品高潮视频| 开心色5月久久精品| 欧美日本高清视频| 久久精品中文| 欧美日韩国产黄| 久久精品午夜| 欧美片第1页综合| 久久九九99| 欧美三级乱码| 欧美高清视频在线| 国产精品入口| 亚洲欧洲精品一区二区| 国产免费观看久久| 亚洲美女精品成人在线视频| 国产一区二区三区的电影| 亚洲精品久久久久久久久久久 | 性欧美xxxx大乳国产app| 久久综合成人精品亚洲另类欧美| 夜夜狂射影院欧美极品| 久久精品国产一区二区电影| 国产精品99久久久久久有的能看| 久久成人这里只有精品| 亚洲午夜一区二区三区| 亚洲破处大片| 黄色一区二区三区| 亚洲网友自拍| 亚洲伦理久久| 久久综合国产精品| 久久大逼视频| 国产精品www网站| 亚洲国产一区二区三区a毛片| 国产主播一区二区三区| 亚洲午夜羞羞片| 一区二区高清视频在线观看| 久久亚洲春色中文字幕久久久| 欧美一区视频| 国产精品视频专区| 一区二区三区.www| 一区二区三区四区国产精品| 乱人伦精品视频在线观看| 久久久久久成人| 国产日韩在线看片| 亚洲综合色自拍一区| 亚洲免费小视频| 国产精品国产三级国产专区53 | 亚洲国产视频一区二区| 欧美中文字幕视频| 久久蜜桃香蕉精品一区二区三区| 国产精品久久久久国产a级| 亚洲精品国产精品乱码不99按摩| 亚洲精品国产精品国自产观看 | 久久久久久久久久久久久9999| 欧美一区二区免费| 国产欧美日韩综合| 久久国产精品黑丝| 另类天堂av| 亚洲破处大片| 欧美久久久久久| 99国产精品久久久| 午夜精品国产更新| 国产亚洲精品aa| 久久夜色精品| 亚洲第一福利视频| 夜夜嗨av一区二区三区四季av| 欧美视频中文一区二区三区在线观看 | 欧美日韩在线直播| 一区二区三区产品免费精品久久75| 亚洲手机成人高清视频| 国产精品乱码久久久久久| 亚洲欧洲av一区二区| 久久综合五月| 日韩视频永久免费观看| 欧美香蕉大胸在线视频观看| 午夜精品久久久久久久白皮肤| 久久久亚洲国产天美传媒修理工 | 欧美在线观看一区二区| 国产综合网站| 欧美va亚洲va国产综合| 9色精品在线| 国产精品在线看| 美日韩精品免费观看视频| 亚洲日本精品国产第一区| 亚洲性夜色噜噜噜7777| 国产日韩高清一区二区三区在线| 久久精品一区二区国产| 亚洲精品久久久久久一区二区| 午夜视频在线观看一区二区三区| 韩国一区二区三区在线观看| 欧美二区不卡| 性欧美精品高清| 亚洲第一天堂av| 欧美在线地址| 99综合精品| 一色屋精品视频在线观看网站| 欧美激情亚洲一区| 久久精品国产一区二区电影 | 亚洲欧美日韩精品久久久久| 国产综合色产| 国产精品欧美在线| 欧美国产综合| 久久精品亚洲乱码伦伦中文| 日韩亚洲国产欧美| 欧美黄色小视频| 久久精品视频99| 亚洲免费视频成人| 亚洲精品社区| 亚洲高清精品中出| 国产日韩在线播放| 国产精品久久久久永久免费观看 | 一本色道久久88综合日韩精品 | 国产视频久久网| 欧美久久久久久久久久| 美国成人毛片| 久久人人97超碰国产公开结果 | 一区二区日韩精品| 亚洲久色影视| 亚洲美女黄色片|