DOTY
DirectX11. check 1) Back-Face culling 본문
728x90
반응형
공부 하다가 왜 회전하는 삼각형이 앞면에만 표시되고 뒷면은 보여지지 않는걸까 생각을 해봤다.
vertices[0].position = XMFLOAT3(-1.0f, -1.0f, 0.0f); // Bottom left.
vertices[0].texture = XMFLOAT2(0.0f, 1.0f);
vertices[0].normal = XMFLOAT3(0.0f, 0.0f, -1.0f);
vertices[1].position = XMFLOAT3(0.0f, 1.0f, 0.0f); // Top middle.
vertices[1].texture = XMFLOAT2(0.5f, 0.0f);
vertices[1].normal = XMFLOAT3(0.0f, 0.0f, -1.0f);
vertices[2].position = XMFLOAT3(1.0f, -1.0f, 0.0f); // Bottom right.
vertices[2].texture = XMFLOAT2(1.0f, 1.0f);
vertices[2].normal = XMFLOAT3(0.0f, 0.0f, -1.0f);
vertices[3].position = XMFLOAT3(-1.0f, -1.0f, 0.0f); // Bottom left.
vertices[3].texture = XMFLOAT2(0.0f, 1.0f);
vertices[3].normal = XMFLOAT3(0.0f, 0.0f, 1.0f);
vertices[4].position = XMFLOAT3(0.0f, 1.0f, 0.0f); // Top middle.
vertices[4].texture = XMFLOAT2(0.5f, 0.0f);
vertices[4].normal = XMFLOAT3(0.0f, 0.0f, 1.0f);
vertices[5].position = XMFLOAT3(1.0f, -1.0f, 0.0f); // Bottom right.
vertices[5].texture = XMFLOAT2(1.0f, 1.0f);
vertices[5].normal = XMFLOAT3(0.0f, 0.0f, 1.0f);
위의 예시를 들어서 설명하자면 렌더링이 안되는 경우의 코드는 다음과 같다.
indices[0] = 0; // Bottom left.
indices[1] = 1; // Top middle.
indices[2] = 2; // Bottom right.
indices[3] = 3; // Bottom left.
indices[4] = 4; // Top middle.
indices[5] = 5; // Bottom right.
렌더링이 되는 경우의 코드는 다음과 같다.
indices[0] = 0; // Bottom left.
indices[1] = 1; // Top middle.
indices[2] = 2; // Bottom right.
indices[3] = 5; // Bottom right.
indices[4] = 4; // Top middle.
indices[5] = 3; // Bottom left.
두 코드의 차이는 방향에 차이가 있다.
삼각형을 그릴 때 Vertex 순서를 시계방향으로 하냐, 반 시계방향으로 하냐의 차이.
이를 설명하기 위해서 Back-Face Culling을 알아야한다.
Back-Face Culling
3D 객체는 보통 삼각형으로 구성되며, 삼각형은 앞면(Front-face)과 뒷면(Back-face)을 가지고 있다. 렌더링 시에는 앞면이 시야에 보이는 경우에만 그리는 것이 효율적으로 Back-face culling은 이러한 원리를 이용하여 뒷면을 그리지 않고 제외하여 렌더링 성능을 향상시킨다.
기본적으로 DirectX에서는 Back-Face Culling을 사용하는 것을 기본으로 앞면을 시계방향으로 정의한다.
하지만 설정을 변경할 수 있다.
D3D11_RASTERIZER_DESC rasterDesc;
rasterDesc.CullMode = D3D11_CULL_BACK;
rasterDesc.FrontCounterClockwise = false;
CullMode
- D3D11_CULL_BACK : Back-Face Culling을 사용한다는 뜻으로 D3DRS_CULLMODE 렌더링 모드와 같다.
- D3DCULL_NONE : Back-Face Culling을 사용하지 않는다.
FrontCounterClockwise
- false : 시계 방향(Clockwise)를 앞으로 설정한다.
- true : 반시계 방향을 앞으로 설정한다.
728x90
반응형
'DirectX' 카테고리의 다른 글
DirectX11. 8) Ambient Light, Specular Lighting (0) | 2023.06.19 |
---|---|
DirectX11. 7) 3D Model Rendering (0) | 2023.06.16 |
DirectX11. 6) Light (0) | 2023.06.14 |
DirectX11. 5) Texture (0) | 2023.06.13 |
DirectX11. 4) Buffer, Shader II (0) | 2023.06.12 |
Comments