OpenGL NanoVG

OpenGL NanoVG를 이용한 별 만들기

리저브콜드브루 2023. 4. 17. 17:06
728x90
반응형

NanoVG API를 사용한 별 만들기를 해보았다.

기존 demo.c에 소스코드를 추가했다.

 

demo.c

void drawStar(NVGcontext* vg, float cx, float cy, float vertexCnt, float r)
{
	if (vertexCnt <= 1)
	{
		return;
	}

	nvgSave(vg);

	nvgBeginPath(vg);
    
    //생성하고자 하는 cx, cy 2차원 좌표에 먼저 점을 찍는다.
	nvgMoveTo(vg, cx, cy); 
    //반지름 r만큼 cx에 더하여 별의 첫 꼭지점을 찍어준다.
	nvgLineTo(vg, cx + r, cy);
    
	float xx, yy;
	float a = (360.0f / vertexCnt) * NVG_PI / 180.0f; //꼭지점의 개수만큼 중심각을 나눈다.

	//움푹 파인곳과 별의 꼭지점을 표현하기 위해 vertexCnt에 2를 곱한다.
	for (int i = 1; i <= vertexCnt * 2; i+=2)
	{
    	//움푹 파인곳에 점을 찍기 위한 연산.
		xx = cx + r / 2 * cosf(i * a / 2);
		yy = cy + r / 2 * sinf(i * a / 2);
		nvgLineTo(vg, xx, yy);
        
        //다음 별의 꼭지점을 위한 연산.
		xx = cx + r * cosf((i + 1) * a / 2);
		yy = cy + r * sinf((i + 1) * a / 2);
		nvgLineTo(vg, xx, yy);
	}
	nvgClosePath(vg);
    
    //색을 채워준다.
	nvgFillColor(vg, nvgRGBA(255, 255, 0, 255));
	nvgFill(vg);

	nvgRestore(vg); 
}

 

//파라미터값에 따른 별의 모습
drawStar(vg, 200.0f, 200.0f, 2.0f, 50.0f);
drawStar(vg, 300.0f, 300.0f, 3.0f, 50.0f);
drawStar(vg, 400.0f, 400.0f, 5.0f, 50.0f);
drawStar(vg, 500.0f, 500.0f, 10.0f, 50.0f);
drawStar(vg, 600.0f, 600.0f, 20.0f, 50.0f);

 

실행 모습

 

 

728x90
반응형

'OpenGL NanoVG' 카테고리의 다른 글

OpenGL NanoVG를 이용한 간단한 눈 내리는 효과  (0) 2023.04.18