Tôi là người mới chơi OpenGL hiện đại. Tôi cảm thấy thoải mái với phương pháp OpenGL ngay lập tức, nhưng tôi chưa bao giờ thực hiện bất kỳ việc sử dụng VBO nghiêm trọng nào. Câu hỏi của tôi là về hoạt hình. Trong chế độ ngay lập tức, để đạt được hiệu ứng động, bạn chỉ cần truyền các vị trí đỉnh khác nhau (được nội suy từ khung hình chính) trong không gian đối tượng.
Làm thế nào điều này đạt được trong OpenGL không ngay lập tức? Rõ ràng, tải lên dữ liệu VBO mới cho mỗi khung hình chắc chắn sẽ làm hỏng xe buýt đồ họa. Tôi chưa tìm thấy tài liệu nào về cách hiện đại để làm điều đó. Suy nghĩ về nó, tôi đã đi đến một số lựa chọn:
- Các thuộc tính: hình ảnh động như một phần bù 3d. Đối với mỗi khung, một thuộc tính bù khác nhau (có thể được nội suy) được truyền cho mỗi đỉnh, được áp dụng cho cùng một đỉnh mỗi khung hình chính.
- Chỉ số: lưu trữ các khung hình chính dưới dạng các đỉnh tuyệt đối và tích lũy chúng thông qua lập chỉ mục, sử dụng một tập hợp các đỉnh khác nhau cho mỗi khung hình chính. Tôi thấy cách tiếp cận này là không thể, vì bạn không thể truy cập các khung hình chính liền kề và do đó không thể nội suy giữa chúng. Ngoài ra, có vẻ như một ý tưởng tồi cho hoạt hình thủ tục.
- Kết cấu: điều này có thể rất co giãn nhưng nghe có vẻ là một giải pháp tốt cho tôi. Một lần nữa, hình ảnh động được coi là phần bù xyz cho mỗi đỉnh. Mỗi khung hình chính có thể được lưu trữ trong kết cấu 1D trong đó kích thước ánh xạ tới vertexID. Nếu tôi không nhầm, trong OpenGL 4.0, bạn có thể truy cập kết cấu từ bất kỳ trình đổ bóng nào, vì vậy bạn có thể đọc kết cấu này từ trình tạo bóng đỉnh và áp dụng từng phép biến đổi đỉnh. Một kết cấu 2D có thể chứa nhiều khung hình. Bạn vẫn thực hiện phép nội suy (và nếu phép nội suy hoạt động cho kết cấu bên ngoài shader mảnh, mà tôi không chắc chắn, bạn có thể nội suy tuyến tính miễn phí!) Điều này có thể được áp dụng cho các hệ thống hoạt hình phức tạp hơn như hoạt hình xương mà không cần nhiều nỗ lực.
Tôi có lật đổ điều này không? Bất cứ ai có thể làm sáng tỏ?