Sprite tấm với các đối tượng đệm và shader


9

Cách "tốt nhất" để xử lý các tấm sprite với shader và bộ đệm là gì? Trong chế độ ngay lập tức, thật dễ dàng để sửa đổi texcoords của sprite khi nó được rút ra, nhưng tôi không biết làm thế nào với opengl hiện đại. Tôi có nên lưu trữ tất cả các texcoords trong một bộ đệm và thay đổi con trỏ cho mỗi sprite, hay có cách nào tốt hơn không?

Câu trả lời:


11

Bạn luôn có thể lặp lại bộ đệm looong "vertex; texcoord". Và chỉ sử dụng các chỉ số như bạn đã nói. Nó dễ dàng nhất và tương tự như những gì bạn biết.

Nếu bạn muốn tiết kiệm một số bộ nhớ. Có một giải pháp khá gọn gàng và đó là có một sprite trong bộ đệm với hợp nhất texcoords và tạo ma trận biến đổi UV và gửi nó tới shader của bạn và nhân texcoords với nó (trong shader đỉnh).

Bạn không phải tự tạo ma trận nếu bạn không ổn với điều đó. Bạn chỉ có thể sử dụng các hàm GL thông thường và hơn là đọc ma trận với glGetFloatvhàm. Như thế này:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Tôi đã tạo ra hình ảnh để mô tả nó tốt hơn. glTranslate ang glScale có thể được xem như chúng chỉ đang di chuyển với cơ sở không gian UV.

tia cực tím

Nếu bạn không biết cách gửi ma trận tới shader tôi có thể chia sẻ một số mã với bạn.

Chỉnh sửa: Đã thêm hình ảnh
(nguồn cho spritesheet tôi đã sử dụng: funorb.com )


Ồ cảm ơn nhé! Câu trả lời hoàn hảo. Tôi thực sự thích giải pháp này và sẽ xem xét nó ngay khi tôi đi làm về. :-) Nếu tôi gặp khó khăn, tôi sẽ làm phiền bạn với một số câu hỏi nữa.
uggwar

Điều này sẽ, theo như tôi có thể thấy, tạo ra một cuộc gọi rút thăm cho mỗi sprite. Có cách nào để bó các sprite này để thực hiện mượt mà hơn không?
uggwar

@uggwar Bản vẽ ngay lập tức?
Notabene
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.