πŸ“˜ Direct3D Tutorial3

파인·2022λ…„ 2μ›” 6일
0

Directx

λͺ©λ‘ 보기
3/8
post-thumbnail

https://docs.microsoft.com/en-us/previous-versions//ff729720(v=vs.85)?redirectedfrom=MSDN

μœ„ λ‚΄μš©μ„ μ°Έκ³ ν•˜μ—¬ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

Tutorial3 :

1) κ·Έλž˜ν”½ νŒŒμ΄ν”„λΌμΈμ„ 톡해 μ‚Όκ°ν˜•μ„ κ·Έλ¦¬λŠ” κ³Όμ • μ•Œμ•„λ³΄κΈ°

2) 셰이더


πŸ“Œ Shaders (셰이더)

Direct3D 11은 정점 셰이더, μ§€μ˜€λ©”νŠΈλ¦¬ 셰이더, ν”½μ…€ 셰이더λ₯Ό μ§€μ›ν•œλ‹€.
정점 μ…°μ΄λ”λŠ” 정점을 μž…λ ₯으둜 λ°›μ•„ 정점 버퍼λ₯Ό 톡해 GPU둜 μ „λ‹¬λ˜λŠ” λͺ¨λ“  정점에 λŒ€ν•΄ ν•œ λ²ˆμ”© μ‹€ν–‰λœλ‹€.
μ§€μ˜€λ©”νŠΈλ¦¬ μ…°μ΄λ”λŠ” 점, μ„ , μ‚Όκ°ν˜• 등을 μž…λ ₯으둜 λ°›μ•„ 각각 ν•œ λ²ˆμ”© μ‹€ν–‰λœλ‹€.
ν”½μ…€ μ…°μ΄λ”λŠ” λ Œλ”λ§ν•˜κ³ μž ν•˜λŠ” ν”½μ…€λ§ˆλ‹€ ν•œ λ²ˆμ”© μ‹€ν–‰λœλ‹€.

μ§€μ˜€λ©”νŠΈλ¦¬ μ…°μ΄λ”λŠ” 선택사항이닀.

μ‹€ν–‰ μˆœμ„œ : 정점 셰이더 -> (μ§€μ˜€λ©”νŠΈλ¦¬ 셰이더) -> λ ˆμŠ€ν„°λΌμ΄μ € -> ν”½μ…€ 셰이더


πŸ“Œ Vertex Shaders (정점 셰이더)

정점 μ…°μ΄λ”μ˜ κ°€μž₯ μ€‘μš”ν•œ 역할은 λ³€ν™˜(transformation)이닀.
예λ₯Ό λ“€μ–΄ μ‚Όκ°ν˜•μ΄ 2D ν…μŠ€μ²˜ 버퍼에 그렀질 λ•Œ GPUλŠ” 꼭짓점이 그렀질 버퍼 μƒμ˜ 점의 2D μ’Œν‘œλ₯Ό μ•Œμ•„μ•Ό ν•œλ‹€.
μš°μ„  이 νŠœν† λ¦¬μ–Όμ—μ„œλŠ” λ³€ν™˜μ„ μ§„ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.

Direct3D 11 νŠœν† λ¦¬μ–Όμ—μ„œλŠ” 셰이더λ₯Ό HLSL(High-Level Shading Language)둜 μž‘μ„±ν•˜μ˜€λ‹€.

정점 μ…°μ΄λ”λŠ” λ‹€μŒκ³Ό κ°™λ‹€.


πŸ”Ž 정점 셰이더

    float4 VS( float4 Pos : POSITION ) : SV_POSITION
    {
        return Pos;
    }

πŸ“Œ Pixel Shaders (ν”½μ…€ 셰이더)

λͺ¨λ‹ˆν„°λŠ” ν”½μ…€λ“€μ˜ 2차원 격자이고, 각각의 픽셀듀은 독립적인 색깔을 가지고 μžˆλ‹€. λ”°λΌμ„œ μš°λ¦¬κ°€ λ³΄λŠ” μ‚Όκ°ν˜•μ€ μ‹€μ œλ‘œλŠ” μ•„λž˜ κ·Έλ¦Όμ—μ„œ 였λ₯Έμͺ½κ³Ό 같은 ν˜•νƒœμ΄λ‹€.

μ„Έ 개의 μ •μ μœΌλ‘œ μ •μ˜λœ μ‚Όκ°ν˜•μ„ ν”½μ…€ λͺ¨μŒμœΌλ‘œ λ³€ν™˜ν•˜λŠ” 과정을 λ ˆμŠ€ν„°λΌμ΄μ¦ˆλΌκ³  ν•œλ‹€. GPUλŠ” λ¨Όμ € λ Œλ”λ§λ˜λŠ” μ‚Όκ°ν˜•μ— ν¬ν•¨λ˜λŠ” 픽셀을 κ²°μ •ν•œλ‹€. 그런 λ‹€μŒ 각 픽셀에 λŒ€ν•΄ ν™œμ„± ν”½μ…€ 셰이더λ₯Ό ν˜ΈμΆœν•œλ‹€.
ν”½μ…Έ μ…°μ΄λ”μ˜ 주된 λͺ©μ μ€ 정점 μ…°μ΄λ”λ‚˜ μ§€μ˜€λ©”νŠΈλ¦¬λΆ€ν„° μž…λ ₯을 μ–»μ–΄μ„œ 각 ν”½μ…€μ˜ 색깔을 κ³„μ‚°ν•˜λŠ” 것이닀.
이 색상을 κ³„μ‚°ν•œ λ‹€μŒ λ‹€μ‹œ νŒŒμ΄ν”„λΌμΈμœΌλ‘œ 보낸닀.


πŸ”Ž ν”½μ…€ 셰이더

    float4 PS( float4 Pos : SV_POSITION ) : SV_Target
    {
        return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
    }

SV_Target : λ Œλ” νƒ€κ²Ÿ ν˜•μ‹μœΌλ‘œμ˜ 좜λ ₯을 의미


πŸ“Œ Creating the Shaders (셰이더 λ§Œλ“€κΈ°)

D3DX11CompileFromFile()λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ§Œλ“€ 수 μžˆλ‹€.

πŸ”Ž μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ—μ„œ 셰이더 λ§Œλ“€κΈ°

    // Create the vertex shader
    if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "VS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL ) ) )
        return FALSE;

    // Create the pixel shader
    if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "PS", "ps_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pPSBlob, &pErrorBlob, NULL ) ) )
        return FALSE;

profile
κ³΅λΆ€μ •λ¦¬μš©

0개의 λŒ“κΈ€