본문 바로가기
공부/DirectX11

[DX11] 원뿔 도형 만들기 (Cone Mesh)

by 김샤랑 2023. 5. 22.

[DX11]  원뿔 도형 만들기 (Cone Mesh)


스포트라이트를 구현하기 위해 필요한 원뿔 메쉬를 만들어보자. 

 

원뿔 도형은 한 점(0,0,0)에서 같은 길이의 직선으로 원을 그린 모양이다.

 

  • 높이가 1이고 반지름이 0.5로 설정했다.

  • 원뿔 도형이 실제 빛의 방향과 같게 해주어 계산을 편리하게 하고자 했다.

  • 꼭짓점 (0,0,0) 생성. vecVtx(0)이다. 

  • 옆면을 그린다. 꼭짓점과 아래 두점을 연결한 삼각형들

 

  • 입력한 정보로 새로운 메쉬 생성 (ConeMesh)

 

 

최종 결과

 


코드

	// Cone Mesh

	fRadius = 0.5f;
	float fHeight = 1.0f;
	
	// Top
	v.vPos = Vec3(0.f, 0.f, 0.f);
	v.vUV = Vec2(0.5f, 0.f);
	v.vColor = Vec4(1.f, 1.f, 1.f, 1.f);
	v.vNormal = Vec3(0.f, 0.f, -1.f);
	v.vTangent = Vec3(1.f, 0.f, 0.f);
	v.vBinormal = Vec3(0.f,  1.f, 0.f);
	vecVtx.push_back(v);
	
	// Body
	iSliceCount = 40; // 원뿔의 세로 분할 개수
	
	fSliceAngle = XM_2PI / iSliceCount;
	
	fUVXStep = 1.f / (float)iSliceCount;
	fUVYStep = 1.f;
	
	for (UINT i = 0; i <= iSliceCount; ++i)
	{
		float theta = i * fSliceAngle;
	
		v.vPos = Vec3(fRadius * cosf(theta), fRadius * sinf(theta), fHeight);
		v.vUV = Vec2(fUVXStep * i, fUVYStep);
		v.vColor = Vec4(1.f, 1.f, 1.f, 1.f);
		v.vNormal = Vec3(0.f, 0.f, 1.f);
		v.vTangent = Vec3(1.f, 0.f, 0.f);
		v.vBinormal = Vec3(0.f, 1.f, 0.f);
		vecVtx.push_back(v);
	
		// 인덱스
		if (i < iSliceCount)
		{
			vecIdx.push_back(0);
			vecIdx.push_back(i + 2);
			vecIdx.push_back(i + 1);
		}
	
	}

'공부 > DirectX11' 카테고리의 다른 글

[DX11] 반사광 방향 벡터 유도하기  (0) 2023.05.15
[DX11] ChatGPT로 좌표계 복습하기  (0) 2023.05.03

댓글