Có thể lưu trữ các thuộc tính đỉnh khác nhau trong các bộ đệm đỉnh khác nhau không?Lưu trữ các thuộc tính đỉnh khác nhau trong các khác nhau của VBO
Tất cả các ví dụ tôi đã nhìn thấy cho đến nay làm một cái gì đó như thế này
float data[] =
{
//position
v1x, v1y, v1z,
v2x, v2y, v2z,
...
vnx, vny, vnz,
//color
c1r, c1g, c1b,
c2r, c2g, c2b,
...
cnr, cng, cnb,
};
GLuint buffname;
glGenBuffers(1, &buffname);
glBindBuffer(GL_ARRAY_BUFFER, buffname);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
Và các bản vẽ được thực hiện một cái gì đó như thế này:
glBindBuffer(GL_ARRAY_BUFFER, buffname);
glEnableVertexAttrib(position_location);
glEnableVertexAttrib(color_location);
glVertexAttribPointer(position_location, 3, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(color_location, 3, GL_FLOAT, GL_FALSE, 0, (void*)(3*n));
glDrawArrays(GL_TRIANGLES, 0, n/3);
glDisableVertexAttrib(position_location);
glDisableVertexAttrib(color_location);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Không phải là nó có thể lưu trữ dữ liệu vị trí và dữ liệu màu trong các VBO khác nhau? Vấn đề là tôi không hiểu làm thế nào điều này sẽ làm việc ra bởi vì bạn không thể ràng buộc hai bộ đệm cùng một lúc, có thể bạn?
Nếu có một giải pháp đơn giản nhưng không hiệu quả, tôi sẽ thích nó hơn một giải pháp phức tạp hơn nhưng hiệu quả vì tôi đang ở trạng thái học chính và tôi không muốn làm phức tạp quá nhiều.
Ngoài ra, nếu những gì tôi yêu cầu là có thể, đó có phải là một ý tưởng hay không?
Để làm rõ: Tôi hiểu cách tôi có thể lưu trữ các thuộc tính khác nhau trong các VBO khác nhau. Tôi không hiểu làm thế nào sau này tôi sẽ vẽ chúng.
Cảm ơn bạn rất nhiều! Tôi hiểu!Nhiều thứ khác trở nên đột nhiên rõ ràng hơn :))) Còn câu hỏi thứ hai của tôi thì sao? Nó thường được coi là một ý tưởng hay không? –
@Armen: xem chỉnh sửa của tôi. –
Tôi thấy rõ hơn bây giờ. Cảm ơn rất nhiều. Vì vậy, nó đơn giản trường hợp chúng ta nên sử dụng cách tiếp cận đầu tiên được đề cập bởi Nicol, và IF cần chúng tôi sử dụng các VBO khác nhau. Cảm ơn rõ ràng hơn nhiều! –