본문 바로가기
공허의 유산/표현의 자유

[opengl].[#2.GLSL] 06. gl_Position 끄적거리기(2)

by 바른생활머시마 2023. 1. 9.
728x90
반응형

지난 시간에는 Shader 밖에서 설정 된 Vertex 좌표가 gl_Position에 전달되는지 확인 해 봤습니다. 코드 상에서는 glRotate를 했지만 이것은 Model View Matrix에 영향을 미쳤고, glVertex로 입력 된 좌표가 그대로 gl_Position으로 전달 된 것을 볼 수 있었습니다.

https://learn-and-give.tistory.com/29

 

[opengl].[#2.GLSL] 05. gl_Position 끄적거리기

앞에서 gl_Color의 특성에 대해서 알아보았습니다. https://learn-and-give.tistory.com/28 [opengl].[#2.GLSL] 04. gl_Color 끄적거리기 지난 글에서 Shader가 interpolation을 통해서 여러가지 벡터를 보간하고, 그것으로

learn-and-give.tistory.com

 

 

Vertex Shader 내부에서의 좌표 조정

이제 Shader 내부에서 좌표를 변경했을 때 어떻게 되는지 살펴보겠습니다. 그 영향이 잘 드러나도록 Vertex가 많은 주전자를 이용해보겠습니다. 그리고, 아직 조명이 적용되지 않았기 때문에 Solid Teapot은 위치의 변화를 나타낼 수 없으니, Wireframe Teapot을 사용하겠습니다.

 

x좌표를 삼각함수의 입력으로 하여 계산 된 값을 y좌표에 더해주면 꿀렁꿀렁거리는 모양이 될 것 같네요.

Vertex Shader를 아래와 같이 작성 해 보겠습니다.

void main()
{	
	gl_FrontColor = gl_Color;
	vec4 newPos = vec4(gl_Vertex);
	newPos.y = newPos.y + sin(2.0*newPos.x);
	gl_Position = gl_ModelViewProjectionMatrix * newPos;
}

결과는~

 

 

 

sine curve가 되는 것 같기는 한데, 구불구불 해지도록 주기가 좀 더 빨라지도록 하고(X2 --> X8), 진폭도 조금 줄여서(/4) 화면 내에서 잘 보이도록 해보겠습니다.

void main()
{	
	gl_FrontColor = gl_Color;
	vec4 newPos = vec4(gl_Vertex);
	newPos.y = newPos.y + sin(8.0*newPos.x) / 4.0;
	gl_Position = gl_ModelViewProjectionMatrix * newPos;
}

의도한 모양으로 잘 변형이 되었네요.

 

 

생각 해 볼 사항

만약 가로로 선을 하나 그리면 구불구불한 곡선이 될까요??

	glColor3f(0.2f, 0.2f, 0.6f);
	//glutWireTeapot(0.5f);
	glBegin(GL_LINES);
	glVertex3f(-0.5f, 0.f, 0.f);
	glVertex3f(0.5f, 0.f, 0.f);
	glEnd();
	glFlush();

결과는???

왜 곡선이 아니라 직선이 나왔을까요??

 

Vertex Shader에서는 Vertex의 위치를 조정해줬습니다. 즉, 두 점을 이어주는 도형의 양 끝점의 좌표만 바꿔주었기 때문에 그대로 선으로 그려졌습니다. 주전자의 경우, Vertex가 많았기 때문에 마치 화면 전체가 변형 된 것 처럼 보였던 것입니다. 가로로 그어진 선이라도 그 사이에 Vertex가 많다면 어떨까요??

 

네, 맞습니다. 아래와 같이 선 사이에 Vertex를 넣어주면 각각의 좌표가 변환되어 곡선 형태에 가까워집니다.

그럼, 화면이  꿀렁꿀렁 거리는 것은 어떻게 구현할까요??

아직 배우지 않은 내용이지만 한번 상상해보는 것으로 남기고, 마무리 하겠습니다.

 

이렇게 해 놓고 보니, 동적으로 변화하는 모습을 만들어 보고 싶은데, 다음 시간에 한번 해 보도록 하겠습니다.

https://learn-and-give.tistory.com/34

 

[opengl].[#2.GLSL] 07. Vertex Shader에서 간단한 애니메이션 구현

앞에서 Vertex Shader에서 수식을 이용하여 Vertex 좌표를 변경 할 수 있는 것을 보았고, 이것이 Vertex의 좌표를 변경 할 뿐, Vertex로 구성 된 메쉬의 Topology와는 관계가 없다는 사실, 그리고 Pixel 수준에

learn-and-give.tistory.com

 

728x90
반응형

댓글