OpenGL Shader – 16

Varying 변수
원문 : http://www.lighthouse3d.com/opengl/glsl/index.php?varying

이전에 언급했듯이, 쉐이더는 2가지가 있다 : 버텍스 쉐이더와 프레그먼트 쉐이더. 프레그먼트에 대한 값을 계산하기 위해서는, 버텍스 쉐이더에 접근할 필요가 있다. 예를들어서, 프레그먼트에 대한 빛 계산을 하려면, 해당 프레그먼트에서의 노말벡터를 얻어와야 한다. 그러나 OpenGL에서, 노말벡터는 오직 버텍스에 지정되어져 있다. Attribute 변수를 사용해서 OpenGL 어플리케이션으로부터 노말벡터를 얻어왔기 때문에 노말벡터를 버텍스 쉐이더에서 접근할 수 있지만, 프레그먼트 쉐이더에서는 접근할 수 없다.

모든 버텍스 데이터를 포함해서, 버텍스가 처리된 후에, 버텍스 정보는 연결정보를 이용할 수 있는, 파이프라인의 어떤 단계로 이동된다. 이 어떤 단계가 프리미티브가 만들어지고 계산되어지는 단계이다. 각 프레그먼트에 대해서, 자동으로 해석되어지고 프레그먼트 쉐이더에 제공되지는 변수가 있다. 예를들어 프레그먼트의 색상이 있다. 프레그먼트 쉐이더에 도착하는 색상은 프리미티브를 구성하는 버텍스의 색상 보간의 결과이다.

이 변수의 타입이 바로 “varying” 변수이다. GLSL은 미리 정의된 몇개의 varying 변수를 가지고 있는데, 위에서 언급한 색상이 한 예이다. GLSL은 varying 변수를 사용자가 정의할 수 있다. 이 변수는 버텍스 쉐이더와 프레그먼트 쉐이더 모두에서 선언되어져야한다. 아래처럼 말이다.

varying float intensity;

varying 변수는 버텍스 쉐이더에서 각 버텍스에 대한 계산값으로 설정된다. 프레그먼트 쉐이더에서 이 varying 변수(버텍스 쉐이더에서 이미 계산되어진 값들)는 단지 읽기만 할 수 있다.

“OpenGL Shader – 16”에 대한 2개의 댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다