Tăng và giảm kích thước điểm ảnh hưởng đến hơn một pixel, nhưng shaders có nghĩa là để được chạy một lần duy nhất cho mỗi pixel. Nó sẽ thất bại, bởi vì khi chương trình đổ bóng đã được chạy cho một pixel cụ thể, có thể thay đổi chỉ ảnh hưởng đến các pixel sau, nhưng không ảnh hưởng đến các pixel trước đó.
Chương trình Shader được chạy trên nhiều đơn vị đổ bóng đồng thời và cho nhiều pixel song song khiến bạn không thể làm những gì bạn đang cố gắng làm. Giới hạn sẽ là người ta có thể thiết lập kích thước pixel với một chương trình đổ bóng, nhưng nó sẽ giữ kích thước của nó cho tất cả các pixel mà chương trình đổ bóng được chạy.
Bạn có thể cố sắp xếp dữ liệu điểm theo kích thước và điểm nhóm có cùng kích thước vào một mảng và vẽ từng mảng với kích thước điểm khác nhau. Hoặc bạn có thể thử làm điều đó với một điểm đầu tiên, nơi bạn lần đầu vẽ các kích thước điểm khác nhau thành một kết cấu và trong một lần thứ hai, kết xuất pixel bằng cách truy cập dữ liệu kết cấu và sử dụng nó để kiểm tra xem pixel có được hiển thị hay không (hoặc không phải).
Cảm ơn. Có cách nào để thiết lập kích thước điểm bằng cách sử dụng thuộc tính đỉnh thay vì sử dụng 'gl_pointSize = gl_Normal.x'? – max
Tôi đoán rằng bạn có thể thêm thuộc tính float của riêng bạn vào shader đó và sử dụng 'glVertexAttrib1f' hoặc' glVertexAttribPointer' để thiết lập nó. Bạn có thể xem http://nehe.gamedev.net/data/articles/article.asp?article=21. – tibur
Ok. Cảm ơn. Thuộc tính đỉnh có phải là cách tiêu chuẩn để chuyển dữ liệu bổ sung vào trình đổ bóng không? – max