2012-11-16 47 views
7

tôi đang làm việc trên bản vẽ đồ thị không chu trình có hướng lớn trong WebGL sử dụng thư viện gwt-G3D theo kỹ thuật này đưa ra ở đây: http://www-graphics.stanford.edu/papers/h3/Vẽ một cấu trúc cây 3D trong WebGL

Tại thời điểm này, tôi có một đơn giản hai cấp graph rendering:

enter image description here

hiệu suất là khủng khiếp - nó mất khoảng 1,5-2 giây để render điều này. Tôi không phải là chuyên gia OpenGL, vì vậy đây là cách tiếp cận chung mà tôi đang thực hiện. Có lẽ ai đó có thể chỉ ra một số tối ưu hóa sẽ làm cho kết xuất này nhanh hơn.

enter image description here

Tôi ngạc nhiên phải mất bao lâu để đẩy ma trận MODELVIEW và bộ đệm cho card đồ họa. Đây là nơi mà phần lớn thời gian của sư tử bị lãng phí. Tôi có nên thay đổi MODELVIEW trong vertex shader không?

Điều này dẫn tôi để tin rằng thao tác ma trận MODELVIEW và đẩy nó một lần cho mỗi nút không phải là một thực tế xấu, nhưng timings không nói dối:

https://gamedev.stackexchange.com/questions/27042/translate-the-modelview-matrix-or-change-vertex-coordinates

+0

Bạn đã định thời gian như thế nào? Thời gian làm dối trá. Một số trình duyệt được song song để thời gian khó. Trong mọi trường hợp, bạn nói rằng phải mất 1,5 đến 2 giây cho mỗi khung hình? Tôi không hoàn toàn hiểu những gì bạn đang làm nhưng đồ thị cảnh đơn giản với 24 hình khối tất cả các parented đến một số trung tâm nên chạy ở 60Hz tốt. Bạn có (1) biên dịch bóng đổ một lần, không phải trong vòng lặp render của bạn (2) Không gọi bất kỳ hàm glGet nào trong vòng lặp render của bạn? (3) tải lên dữ liệu đỉnh của bạn chỉ một lần, không phải trong vòng lặp kết xuất của bạn? Hy vọng những người không phải là câu hỏi câm nhưng bạn sẽ có thể vẽ ~ 1000 khối với tốc độ hợp lý. – gman

Trả lời

2

Nhóm các nút trong lớn hơn các khối thay vì hiển thị riêng chúng. Làm bộ nhớ đệm nền của tất cả các hình học với các phép biến đổi được áp dụng nhiều khả năng sẽ không được sửa đổi và lưu trữ nó trong một bộ đệm và hiển thị trong một cuộc gọi.

Một giải pháp khác: Lưu trữ các nút (hộp + dòng) trong một bộ đệm (Bạn có thể lưu trữ nhiều hơn mức bạn cần tại thời điểm hiện tại) và các phép biến đổi của chúng trong kết cấu. áp dụng các biến đổi trong vertex shader dựa trên chỉ số nút (tọa độ kết cấu) Nó sẽ nhanh hơn nhanh hơn đáng kể.

Để kiểm tra việc sử dụng hỗ trợ this site. Tôi có MAX_VERTEX_TEXTURE_IMAGE_UNITS | 4

Giải pháp tốt nhất sẽ là Geometry Instancing nhưng hiện không được hỗ trợ trong WebGL.

+0

Không có lib, có thể trợ giúp bằng cách hiển thị các nút trong nhóm không? Afaik d3 cũng được sử dụng bởi canvas (không chỉ bởi SVG), nó có tốt cho mục đích này không? – inf3rno

Các vấn đề liên quan