Liên kết các thuộc tính & đối tượng đệm

Mỗi thuộc tính trong chương trình tô bóng đỉnh trỏ đến một đối tượng bộ đệm đỉnh. Sau khi tạo các đối tượng bộ đệm đỉnh, người lập trình phải liên kết chúng với các thuộc tính của chương trình đổ bóng đỉnh. Mỗi thuộc tính chỉ đến một đối tượng bộ đệm đỉnh mà từ đó chúng trích xuất các giá trị dữ liệu, sau đó các thuộc tính này được chuyển đến chương trình đổ bóng.

Để liên kết các đối tượng bộ đệm đỉnh với các thuộc tính của chương trình tô bóng đỉnh, bạn phải làm theo các bước dưới đây:

  • Nhận vị trí thuộc tính
  • Trỏ thuộc tính vào đối tượng bộ đệm đỉnh
  • Bật thuộc tính

Nhận vị trí thuộc tính

WebGL cung cấp một phương thức được gọi là getAttribLocation()trả về vị trí thuộc tính. Cú pháp của nó như sau:

ulong getAttribLocation(Object program, string name)

Phương thức này chấp nhận đối tượng chương trình tô bóng đỉnh và các giá trị thuộc tính của chương trình tô bóng đỉnh.

Đoạn mã sau đây cho biết cách sử dụng phương pháp này.

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

Đây, shader_program là đối tượng của chương trình đổ bóng và coordinates là thuộc tính của chương trình đổ bóng đỉnh.

Trỏ thuộc tính vào VBO

Để gán đối tượng đệm cho biến thuộc tính, WebGL cung cấp một phương thức được gọi là vertexAttribPointer(). Đây là cú pháp của phương thức này:

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

Phương thức này chấp nhận sáu tham số và chúng được thảo luận bên dưới.

  • Location- Nó chỉ định vị trí lưu trữ của một biến thuộc tính. Theo tùy chọn này, bạn phải chuyển giá trị được trả về bởigetAttribLocation() phương pháp.

  • Size - Nó chỉ định số lượng thành phần trên mỗi đỉnh trong đối tượng đệm.

  • Type - Nó chỉ định kiểu dữ liệu.

  • Normalized- Đây là một giá trị Boolean. Nếu đúng, dữ liệu không trôi được chuẩn hóa thành [0, 1]; khác, nó được chuẩn hóa thành [-1, 1].

  • Stride - Nó chỉ định số byte giữa các phần tử dữ liệu đỉnh khác nhau, hoặc số không cho sải chân mặc định.

  • Offset- Nó chỉ định độ lệch (tính bằng byte) trong đối tượng đệm để cho biết dữ liệu đỉnh được lưu trữ từ byte nào. Nếu dữ liệu được lưu trữ từ đầu, offset là 0.

Đoạn mã sau đây cho biết cách sử dụng vertexAttribPointer() trong một chương trình -

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

Bật thuộc tính

Kích hoạt thuộc tính bộ đổ bóng đỉnh để truy cập đối tượng đệm trong bộ đổ bóng đỉnh. Đối với hoạt động này, WebGL cung cấpenableVertexAttribArray()phương pháp. Phương thức này chấp nhận vị trí của thuộc tính làm tham số. Đây là cách sử dụng phương pháp này trong một chương trình -

gl.enableVertexAttribArray(coordinatesVar);