2010-05-30 21 views
10

Vòng kết nối là một trong những thực thể hình học cơ bản. Tuy nhiên, không có nguyên thủy được xác định trong OpenGL cho điều này, như đường thẳng hoặc đa giác. Tại sao như vậy? Đó là một chút khó chịu để bao gồm các tiêu đề tùy chỉnh cho tất cả các thời gian!Tại sao không có vòng tròn hoặc hình elip nguyên thủy trong OpenGL?

Bất kỳ lý do cụ thể nào để bỏ qua nó?

+9

Để chúng tôi có thể yêu cầu mọi người viết chức năng vòng kết nối trong các cuộc phỏng vấn kỹ thuật. –

Trả lời

17

Trong khi vòng tròn có thể hình dạng cơ bản họ không phải là cơ bản như điểm, đường thẳng hoặc hình tam giác khi nói đến rasterisation. Các card đồ họa đầu tiên với khả năng tăng tốc 3D được thiết kế để làm một việc rất tốt, rasterise hình tam giác (và các dòng và các điểm vì chúng là tầm thường để thêm). Thêm bất kỳ hình dạng phức tạp hơn sẽ làm cho thẻ đắt hơn rất nhiều trong khi chỉ thêm một chút chức năng.

Nhưng có một lý do khác để không bao gồm vòng kết nối/dấu ba chấm. Họ không kết nối. Bạn không thể xây dựng một mô hình 3D ra khỏi chúng và bạn không thể kết nối các hình tam giác với chúng mà không thêm khoảng trống hoặc các phần chồng chéo. Vì vậy, đối với các vòng kết nối hữu ích, bạn cũng cần các hình dạng khác như đường cong và các bề mặt nâng cao khác (ví dụ: NURBS). Vòng tròn một mình chỉ hữu ích như "điểm lớn" mà cũng có thể được thực hiện với một quad và một kết cấu hình vòng tròn, hoặc hình tam giác.

Nếu bạn đang sử dụng "tiêu đề tùy chỉnh" cho vòng kết nối, bạn nên lưu ý rằng những người có thể tạo mô hình tam giác tạo thành "vòng kết nối" của bạn.

+0

bạn có thể giải thích ý nghĩa của từ "Tiêu đề tùy chỉnh" không? –

+1

Đó là từ câu hỏi. Tôi không biết chính xác Ram có nghĩa là gì nhưng tôi đoán đó là một thư viện với một số chức năng tiện ích OpenGL. –

+0

* paw-face * Phải, tôi nên đọc câu hỏi trước, hmm? Cảm ơn. –

2

Vì trước đây, thẻ video đã hiển thị điểm, đường và hình tam giác.

Bạn tính đường cong bằng các đường đủ ngắn để thẻ video không phải.

+0

+1 cho sự giảm giá không công bằng. Đây là câu trả lời hợp lệ. –

0

Bạn luôn có thể sử dụng gluSphere (nếu hình dạng ba chiều là thứ bạn đang tìm kiếm).

Nếu bạn muốn vẽ một vòng tròn hai chiều, bạn đang mắc kẹt với các phương thức tùy chỉnh. Tôi sẽ đi với một fan hâm mộ tam giác.

Các nguyên thủy được gọi là nguyên thủy vì một lý do :)

1

Nói điều này tùy thuộc vào độ phân giải

2

Vì thẻ đồ họa hoạt động trên các điểm 3 chiều, đường và hình tam giác. Vòng tròn yêu cầu đường cong hoặc đường splines. Nó không thể được biểu diễn một cách hoàn hảo bởi một nguyên thủy 3D "bình thường", chỉ xấp xỉ như một N-gon (vì vậy nó sẽ trông giống như một vòng tròn ở một khoảng cách nhất định). Nếu bạn muốn có một vòng tròn, hãy viết thói quen đó (không khó để làm). Hoặc vẽ nó như là một N-gon, hoặc làm cho một hình vuông (2 hình tam giác) và cắt một vòng tròn ra khỏi nó bằng cách sử dụng shader mảnh (bạn có thể có được một vòng tròn hoàn hảo theo cách này).

+1

+1. Để có mặt nạ, các trình đổ bóng phân mảnh vẫn chỉ xấp xỉ vòng tròn bằng các pixel trên màn hình. Không phải là một vòng tròn hoàn hảo. = P –

+0

@Xavier Ho: Tuy nhiên, với một shader mảnh bạn sẽ nhận được xấp xỉ hoàn hảo gần như ở bất kỳ khoảng cách từ vòng tròn (ở khoảng cách rất gần có thể có một lỗi chính xác). Ném một chút antialiasing vào tính toán, và sẽ không có gì để phàn nàn về. – SigTerm

+0

"Hoàn hảo xấp xỉ" - Tôi gọi oxymoron! Và có, bạn sẽ chính xác. –

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