[OpenGL] Tessellation Shader로 Curve 그리기

혀니앤·2022년 10월 24일
0

컴퓨터 그래픽스

목록 보기
7/7

Tess shader 만들 때

GL_TESS_EVALUATION_SHADER 을 인자로 전달해서 생성해야 한다

  	GLuint TessControlShaderID = glCreateShader(GL_TESS_CONTROL_SHADER);
	GLuint TessEvaluationShaderID = glCreateShader(GL_TESS_EVALUATION_SHADER);

Tess Shader 인자 넘겨주기

TessShader 쓸 때

1) glPatchParameteri(GL_``PATCH_VERTICES, 몇개 줄 건지) 전달해야 함

2) glDrawArrays(GL_PATCHES, 0, 4); 그릴 때 Patch로 그릴 것이라는 사실도 전달해주어야 함

  	GLuint a_Position = glGetAttribLocation(programID, "a_Position");
	glVertexAttribPointer(a_Position, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(0));
	glEnableVertexAttribArray(a_Position);
	
	//outer 값 넘겨주기
	GLuint u_outer = glGetUniformLocation(programID, "uOuter1");
	glUniform1f(u_outer, 5.0f);
	//fprintf(stdout, "u_outer : %d\n", &u_tess);

  	//몇 개의 패치를 전달할지, 그리고 패치의 개수를 전달함
	glPatchParameteri(GL_PATCH_VERTICES, 4);
	glDrawArrays(GL_PATCHES, 0, 4);

	//Double buffer
	glutSwapBuffers();

최종 결과

Bezier Curve


Bezier 는 모든 Control Points를 지나기 때문에 훨씬 아래로 치우친 모양이다
또한 처음 점과 끝 점을 반드시 지나고 있다

B-Spline Curve

B-Spline 은 근사치로 훨씬 부드러운 곡선 표현이 되었다

profile
일단 시작하기

0개의 댓글