속성 및 버퍼 개체 연결

버텍스 셰이더 프로그램의 각 속성은 버텍스 버퍼 객체를 가리 킵니다. 정점 버퍼 객체를 만든 후 프로그래머는 정점 셰이더 프로그램의 속성과 연결해야합니다. 각 속성은 데이터 값을 추출하는 하나의 정점 버퍼 개체 만 가리키고 이러한 속성은 셰이더 프로그램에 전달됩니다.

Vertex Buffer Objects를 vertex shader 프로그램의 속성과 연결하려면 아래에 주어진 단계를 따라야합니다.

  • 속성 위치 가져 오기
  • 속성을 정점 버퍼 객체로 지정
  • 속성 활성화

속성 위치 가져 오기

WebGL은 getAttribLocation()속성 위치를 반환합니다. 구문은 다음과 같습니다.

ulong getAttribLocation(Object program, string name)

이 메소드는 버텍스 쉐이더 프로그램 객체와 버텍스 쉐이더 프로그램의 속성 값을받습니다.

다음 코드 조각은이 메서드를 사용하는 방법을 보여줍니다.

var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");

여기, shader_program 셰이더 프로그램의 객체이고 coordinates 버텍스 쉐이더 프로그램의 속성입니다.

특성을 VBO에 지정

속성 변수에 버퍼 객체를 할당하기 위해 WebGL은 vertexAttribPointer(). 이 방법의 구문은 다음과 같습니다.

void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)

이 메소드는 6 개의 매개 변수를 허용하며 아래에서 설명합니다.

  • Location− 속성 변수의 저장 위치를 ​​지정합니다. 이 옵션에서 반환 된 값을 전달해야합니다.getAttribLocation() 방법.

  • Size − 버퍼 객체에서 꼭지점 당 구성 요소의 개수를 지정합니다.

  • Type − 데이터의 종류를 지정합니다.

  • Normalized− 이것은 부울 값입니다. 참이면 부동 데이터가 [0, 1]로 정규화됩니다. 그렇지 않으면 [-1, 1]로 정규화됩니다.

  • Stride − 다른 정점 데이터 요소 사이의 바이트 수를 지정하거나 기본 스트라이드의 경우 0을 지정합니다.

  • Offset− 버퍼 객체의 오프셋 (바이트)을 지정하여 정점 데이터가 저장되는 바이트를 나타냅니다. 데이터가 처음부터 저장되는 경우 오프셋 은 0입니다.

다음 스 니펫은 사용 방법을 보여줍니다. vertexAttribPointer() 프로그램에서-

gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);

속성 활성화

버텍스 셰이더 속성을 활성화하여 버텍스 셰이더의 버퍼 개체에 액세스합니다. 이 작업을 위해 WebGL은enableVertexAttribArray()방법. 이 메서드는 속성의 위치를 ​​매개 변수로 받아들입니다. 다음은 프로그램에서이 방법을 사용하는 방법입니다.

gl.enableVertexAttribArray(coordinatesVar);