Tôi muốn triển khai trình xem thời gian cho phép người dùng phóng to và thu gọn.Sử dụng chỉ mục làm tọa độ trong OpenGL
Tôi đã thực hiện một số chế độ trước mắt ngay trước đây, nhưng điều đó hiện không còn được ưa chuộng vì lợi ích của VBO. Tất cả các ví dụ về VBO tôi có thể tìm thấy các tọa độ XYZ của mỗi cửa hàng và mọi điểm.
Tôi nghi ngờ rằng tôi cần giữ tất cả dữ liệu của mình trong VRAM để nhận được tốc độ khung hình trong khi có thể gọi là "trơn tru", nhưng tôi chỉ có dữ liệu Y (biến phụ thuộc). X là một biến độc lập có thể được tính từ chỉ mục và Z là hằng số. Nếu tôi phải lưu trữ X và Z thì yêu cầu bộ nhớ của tôi (cả kích thước bộ đệm và CPU-> chuyển khối GPU) được tăng gấp ba lần. Và tôi có hàng chục triệu điểm dữ liệu mà người dùng có thể xoay, do đó việc sử dụng bộ nhớ sẽ không nhỏ.
Có một số kỹ thuật để vẽ một mảng đỉnh 1-D hay không, nơi chỉ mục được sử dụng làm tọa độ khác hoặc lưu trữ mảng 1-D (có thể trong kết cấu?) Và sử dụng chương trình đổ bóng để tạo XYZ? Tôi ấn tượng rằng tôi cần một trình đổ bóng đơn giản theo mô hình đường ống cố định-ít tính năng mới để thực hiện mở rộng và dịch, vì vậy nếu tôi có thể kết hợp thế hệ tọa độ X và Z và mở rộng/dịch Y lý tưởng.
Điều này có thể thực hiện được không? Bạn có biết mã mẫu nào không? Hoặc bạn có thể ít nhất là cho tôi một số giả mã nói những gì GL chức năng để gọi theo thứ tự nào?
Cảm ơn!
EDIT: Để đảm bảo điều này là rõ ràng, đây là tương đương đang trực tiếp-mode, và mã mảng đỉnh:
// immediate
glBegin(GL_LINE_STRIP);
for(int i = 0; i < N; ++i)
glVertex2(i, y[i]);
glEnd();
// vertex array
struct { float x, y; } v[N];
for(int i = 0; i < N; ++i) {
v[i].x = i;
v[i].y = y[i];
}
glVertexPointer(2, GL_FLOAT, 0, v);
glDrawArrays(GL_LINE_STRIP, 0, N);
lưu ý rằng v[]
là hai lần kích thước của y[]
.
Cảm ơn. Tôi đoán tôi không rõ OpenGL biết tôi muốn 'coord_X' có nghĩa là chỉ số của đỉnh. –
@Ben Voigt: Tôi đã bỏ lỡ bước đầu, xin lỗi :) Câu trả lời đã được sửa ngay bây giờ (sử dụng gl_VertexID). – kvark
Cảm ơn, điều đó đã có ý nghĩa hơn rất nhiều. Và tôi có thể sử dụng 'glDrawArrays' để biểu hiện sự kiện này? Tôi hỏi vì [manpage của 'glDrawArrays'] (http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml) nói" Nếu GL_VERTEX_ARRAY không được kích hoạt, không có primitives hình học nào được tạo ra. " Điều đó không áp dụng trong thế giới OpenGL 3 nơi các vị trí đỉnh được tạo bởi trình đổ bóng không? –