Tôi không thể tìm ra cách sử dụng đối tượng bộ đệm đỉnh cho địa hình của tôi trong phiên bản 2.0 dành cho iphone. Đó là dữ liệu tĩnh vì vậy tôi hy vọng cho một tăng tốc độ bằng cách sử dụng VBO. Trong OpenGL thông thường, tôi sử dụng danh sách hiển thị cùng với trình đổ bóng không có vấn đề gì. Tuy nhiên, trong phiên bản 2.0, tôi phải gửi dữ liệu đỉnh tới shader như một thuộc tính và không biết cách làm việc này với VBO. Làm thế nào để bộ đệm đỉnh có thể biết thuộc tính nào mà nó có để liên kết dữ liệu đỉnh với khi được gọi? Điều này thậm chí có thể trong es 2.0 opengl? Nếu không, có cách nào khác để tôi có thể tối ưu hóa kết xuất địa hình tĩnh không?OpenGL ES 2.0 và các đối tượng đệm đỉnh (VBO)
8
A
Trả lời
12
Chắc chắn, điều này là khá đơn giản trên thực tế, thuộc tính của bạn có một vị trí, và dữ liệu đỉnh được nuôi dưỡng bằng glVertexAttribPointer cho đồng bằng Vertex Mảng, như thế này:
float *vertices = ...;
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices);
Đối VBOs, đó là giống nhau, nhưng bạn có để liên kết bộ đệm với mục tiêu GL_ARRAY_BUFFER, và tham số cuối cùng của glVertexAttribPointer bây giờ là một bù đắp vào bộ nhớ đệm lưu trữ. Giá trị con trỏ chính nó được hiểu là một bù đắp:
glBindBuffer(GL_ARRAY_BUFFER, buffer);
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0);
Trong trường hợp này bù đắp là 0, giả sử dữ liệu đỉnh được tải lên khi bắt đầu bộ đệm. Phần bù là các số đo theo byte.
Bản vẽ sau đó được thực hiện với glDrawArrays/glDrawElements. Hi vọng điêu nay co ich!
Các vấn đề liên quan
- 1. Sử dụng đối tượng đệm Vertex (VBO) trong OpenGL es (Iphone) để cải thiện hiệu suất
- 2. OpenGL es 2.0 Đọc bộ đệm sâu
- 3. Đỉnh động nhanh trong OpenGL ES 2.0 trên Android
- 4. Clipping-planes trong OpenGL ES 2.0
- 5. OpenGL ES 2.0: Thiết lập hiệu quả nhất cho VBO với GL_STREAM_DRAW?
- 6. Chọn OpenGL ES 1.1 hoặc OpenGL ES 2.0?
- 7. OpenGL ES 2.0 tương đương với glOrtho()?
- 8. OpenGL ES 2.0 Các thuật toán chuyển đổi Vertex
- 9. Làm cách nào để thao tác các đối tượng độc lập với nhau trong OpenGL ES 2.0?
- 10. Biến đổi các đối tượng độc lập trong OpenGL ES 2.0
- 11. Kết cấu in trong OpenGL ES 2.0
- 12. Hình ảnh và mặt nạ trong OpenGL ES 2.0
- 13. đối tác của gl_TexCoord trong OpenGL ES 2.0
- 14. OpenGL-ES và Cg
- 15. OpenGL ES 1.1 hoặc 2.0 trên iPhone
- 16. Libgdx không sử dụng Opengl ES 2.0
- 17. Kênh alpha alpha OpenGL ES 2.0
- 18. Các vấn đề về Máy ảnh OpenGL ES 2.0
- 19. Bộ đệm riêng biệt OpenGLES 2.0 cho các đỉnh, màu sắc và tọa độ kết cấu
- 20. OpenGL ES 2.0 nhiều mắt lưới? (chỉ các ví dụ trong thế giới thực)
- 21. Cách đạt được glOrthof trong OpenGL ES 2.0
- 22. Sự cố khi sử dụng VBO để hiển thị các đỉnh - OpenGL
- 23. Cách khắc phục để ghi độ sâu đệm/chiều sâu giá trị trong OpenGL ES 2.0
- 24. khác biệt trong iOS OpenGL ES và Android OpenGL ES
- 25. Cung cấp số nguyên cho chỉ mục mảng trong OpenGL ES 2.0?
- 26. OpenGL VBO trong Haskell
- 27. OpenGL ES 2.0 vs OpenGL 3 - Điểm tương đồng và khác biệt
- 28. OpenGL xử lý nhiều đối tượng
- 29. OpenGL hiện đại: VBO, GLM và Ma trận Stacks
- 30. OpenGL ES và OpenGL shaders tương thích
Có điều này nên làm những gì tôi cần. Tôi sẽ thử nó vào ngày mai. Cảm ơn! – Nitrex88
Nó có lẽ sẽ giúp tôi nếu tôi có thể tìm thấy những gì phải làm với 'đỉnh' trong ví dụ thứ hai. Một ý tưởng? –
@Stephane đỉnh nên được tải lên một VBO bằng cách sử dụng glBufferData. –