[그래픽스] Backface Culling

jaehyeonLee·2025년 1월 3일

BackFace Culling

컴퓨터 그래픽 에서 BackFace Culling은 폴리곤을 그릴 지 여부를 결정한다 . 이는 그래픽 파이프라인에서 폴리곤의 점이 화면에 투사될 때 시계 방향 또는 반시계 방향으로 나타나는지 테스트하는 단계이다. 사용자가 정면 폴리곤이 시계 방향으로 감기도록 지정했지만 화면에 투사된 폴리곤이 반시계 방향으로 감기면 카메라에서 멀어지도록 회전되어 그려 지지 않게된다.

이 과정은 프로그램이 그리는 폴리곤의 수를 줄임으로써 객체를 더빠르고 효율적으로 렌더링이 가능하다.

현재 보이는 부분: 큐브의 정점들이 시계방향으로 구성되어 있어 카메라에서 바라보는 앞면만 렌더링이 된다.

보이지 않는 부분: 내부나 뒤쪽 면은 Backface Culling으로 인해 렌더링되지 않아 보이지 않는다.

DirectX와 OpenGL 등 대부분의 그래픽스 api는 기본적으로 정점의 순서를 사용해 면의 방향을 결정한다

#include "pch.h"
#include "GeometryHelper.h"

void GeometryHelper::CreateQuad(shared_ptr<Geometry<VertexColorData>> geometry, Color color)
{
	vector<VertexColorData> vtx;
	vtx.resize(4);
	//0
	vtx[0].position = Vec3( -0.5f,-0.5f,0.f );
	vtx[0].color = color;
	vtx[1].position = Vec3(-0.5f, 0.5f, 0.f);
	vtx[1].color = color;
	vtx[2].position = Vec3(0.5f, -0.5f, 0.f);
	vtx[2].color = color;
	vtx[3].position = Vec3(0.5f, 0.5f, 0.f);
	vtx[3].color = color;

	//13
	//02
	geometry->SetVertices(vtx);
	//시계방향 순서(Backface Culling)
	vector<uint32> idx = { 0,1,2,2,1,3 };
    geometry->SetIndices(idx); //인덱스 버퍼 채우기 
}

vector idx 는 인덱스 배열로
첫번째삼각형이 정점 0->1->2 인덱스 순서는 시계방향으로 정의 되어있다
두번째 삼각형이 정점 2->1->3으로 이는 정점데이터가 사각형을 나타내도록 구성을 한다
이 역시 시계 방향으로 정의되어 있다

profile
이재현의 필기노트

0개의 댓글