首先,你需要?jiǎng)?chuàng)建一個(gè)邊界著色器,并使用頂點(diǎn)著色器將頂點(diǎn)坐標(biāo)轉(zhuǎn)換成裁剪空間坐標(biāo)(Clip Space Coordinates)。然后,你可以使用邊界著色器的輸出緩沖區(qū)(Output Merger)來繪制空心矩形。
具體來說,你可以在邊界著色器中使用內(nèi)插(Interpolation)來繪制空心矩形。內(nèi)插是一種技術(shù),可以在頂點(diǎn)著色器和像素著色器之間插入一個(gè)過渡步驟,在這個(gè)步驟中,可以使用多種插值方法來控制像素著色器的輸出。 我提供了一份 C++ 代碼,展示了如何使用邊界著色器和輸出緩沖區(qū)來繪制空心矩形:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//包含 DirectX 11頭文件
#include <d3d11.h>
//創(chuàng)建邊界著色器
ID3D11HullShader*pHullShader;
//創(chuàng)建頂點(diǎn)著色器
ID3D11VertexShader*pVertexShader;
//創(chuàng)建輸出緩沖區(qū)
ID3D11Buffer*pOutputBuffer;
//初始化邊界著色器
void InitHullShader()
{
//加載邊界著色器代碼
const char*hullShaderCode =
"void main(input patch<float4, 4> i, output patch<float4, 4> o) {"