Cách nhanh nhất để vẽ các hạt nhỏ trong opengl?


8

Câu hỏi nhanh: Phương pháp nhanh nhất để kết xuất một mảng lớn các hạt 4x4 / 8x8 trong opengl là gì? Hiện tại tôi dành 2triangles cho mỗi người nhưng tôi nghĩ rằng nó chậm nên tôi thực sự muốn biết nếu tôi làm đúng .....


1
Xin lưu ý rằng vì đây là câu hỏi về hiệu suất, bạn nên đo hiệu suất trên nền tảng mục tiêu của mình, (a) để chắc chắn rằng nó thực sự đủ đắt để đáng lo ngại và (b) để kiểm tra tốc độ của bất kỳ giải pháp được đề xuất nào.
Nathan Reed

Câu trả lời:


6

Bạn có thể vẽ điểm với OpenGL.

Bạn muốn gọi glDrawArrays () hoặc glDrawElements () bằng GL_POINTS (thay vì GL_TRIANGLE_STRIP hoặc bất cứ điều gì bạn đang sử dụng.)

Điều này sẽ vẽ các điểm vào màn hình dựa trên kích thước điểm hiện tại mà bạn có thể đặt qua glPointSize () . Bạn cũng có thể bí danh những điểm này, nhưng theo kinh nghiệm của tôi, không phải tất cả các trình điều khiển / phần cứng đều hỗ trợ các điểm bí danh.

Bạn không thể kết cấu những điểm này; chúng chỉ là một màu duy nhất.


Cảm ơn về gợi ý. Bạn có biết tôi có thể thực hiện Phương thức GL_POINT với các trình đổ bóng để tôi có thể ánh xạ một kết cấu cho chúng không?
1010005

1
Bạn có thể sử dụng với các shader, nhưng chỉ có một đỉnh cho một điểm (ở giữa), vì vậy bạn có thể gặp khó khăn khi tìm ra các hợp âm tex. stackoverflow.com/questions/5839095/ có vẻ như nó nói một chút về điều này ...
phải

Bạn cũng có thể thiết lập một sprite điểm với GL_POINTS.
Mick

1
@ user1010005 Để kết cấu bản đồ với GL_POINTS, bạn có thể xem qua GL_POINTinksRITE_ARB. Ngoài ra, tôi khá chắc chắn rằng các điểm luôn kết thúc chiếm cùng số pixel trên màn hình, bất kể bạn ở gần hay xa chúng.
kevintodisco

@ktodisco, bạn có thể vượt qua trong kích thước điểm dưới dạng một thuộc tính. tôi đã đạt được một hiệu ứng sao tốt bằng cách làm điều này. để thay đổi kích thước trong trình tạo bóng dọc, bạn chỉ định biến gl_PointSize
thịt

3

Trong lõi OpenGL 3.2 trở lên, các shader hình học có sẵn để sử dụng. Để đưa ra một cái nhìn tổng quan ngắn gọn, bạn sẽ chỉ yêu cầu OpenGL vẽ các điểm đại diện cho vị trí của các hạt của bạn và những điểm này sẽ đi qua trình tạo bóng đỉnh một cách bình thường, nhưng sau đó khi chúng đến trình đổ bóng hình học, nó sẽ tạo ra hình chữ nhật (ra của hai tris) bằng cách phát ra các đỉnh đến giai đoạn tiếp theo của đường ống. Cùng với các đỉnh bạn có thể lập trình tạo các quy tắc và tọa độ kết cấu.

Vì tất cả đều được thực hiện trong phần cứng, tôi khá chắc chắn rằng đây là cách nhanh nhất để kết xuất các hạt sprite.


1
Đây có lẽ là một giải pháp tốt hơn GL_POINTS, nhưng nó sẽ không hoạt động đối với các triển khai OpenGL cũ hơn (và OpenGL ES).
thịt

Nghe có vẻ hay nhưng tôi dự định chuyển trò chơi của mình sang nền tảng Android :(
user1010005

2
@ user1010005 Chỉ là một mẹo, bạn nên đề cập rằng khi bạn đặt câu hỏi, để chúng tôi biết những hạn chế nào để làm việc với :)
kevintodisco

Tôi là người mới bắt đầu với opengl xin lỗi D:
user1010005

tôi sẽ yêu để xem shader hình học tạo sẵn trong OpenGL ES. ) =
thịt
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.