Cách tạo ra các cạnh và các mặt của hình dạng nguyên thủy như hình hộp, hình nón và tất cả những gì bạn đã trích dẫn là tạo ra chúng cùng lúc bạn tạo các đỉnh. Trong thực tế, bạn nên tạo các đỉnh một cách hợp lý để dễ dàng tính toán các cạnh và mặt cho phù hợp.
Có các thuật toán lấy đầu vào là một tập hợp các điểm trong không gian và tính toán cái gọi là " tam giác tập hợp điểm " trên nó, nhưng vấn đề của tam giác tập hợp điểm là NP-hoàn chỉnh , do đó nhanh hơn để tạo các cạnh và mặt khi bạn đi hơn là chỉ tính các đỉnh và để một thuật toán thực hiện công việc. Chỉ cần cho bạn biết giải pháp này tồn tại.
Ngoài giải pháp không hiệu quả này, tôi cho rằng bạn chỉ có thể xử lý các nguyên thủy trên cơ sở từng trường hợp, như trong các ví dụ sau.
Một lưới là các đỉnh và mặt . Các cạnh được chứa trong mô tả của các mặt trừ khi lưới của bạn chứa các đường không tạo nên các mặt. Các đỉnh là các tuple của 3 tọa độ dấu phẩy động. Các cạnh chỉ đơn giản là các cặp tham chiếu đến các đỉnh, nhưng một lần nữa bạn chắc chắn sẽ không cần chúng. Ví dụ, nói rằng các đỉnh của bạn nằm trong một mảng được lập chỉ mục. Vâng, các cạnh của bạn sau đó có thể là các cặp chỉ số của mảng đó. Các mặt là bộ ba tham chiếu đến các đỉnh hoặc bộ ba chỉ số trong trường hợp mảng được lập chỉ mục .
Bạn sẽ có thể đếm các đỉnh, cạnh và mặt tạo nên từng hình dạng nguyên thủy này bởi vì có thể đếm chúng có nghĩa là hiểu các thuộc tính của đối tượng giúp bạn nghĩ ra phương pháp mà bạn sẽ xây dựng chúng, sử dụng các vòng lặp và các công cụ khác như chúng ta sẽ thấy.
Nón
Đối với hình nón có n + 2 đỉnh, cạnh 3n và mặt 2n :
- Tạo hai đỉnh riêng biệt.
- Tạo một vòng tròn xung quanh một trong các đỉnh (đỉnh cơ sở), nằm trong một mặt phẳng vuông góc với đoạn giữa hai đỉnh đầu tiên. Hy vọng bạn có thể tạo một vòng tròn bằng cách sử dụng lượng giác, phải không? Đó đã là tất cả các đỉnh của hình nón. Đó cũng là một phần ba của tất cả các cạnh (có n cạnh trong vòng tròn và tổng cộng 3n ).
- Tạo n cạnh từ đỉnh cơ sở đến n đỉnh trong vòng tròn. Bạn có thể tạo một nửa khuôn mặt (đó là khuôn mặt n ) khi bạn làm điều đó.
- Tạo n cạnh từ đỉnh đỉnh đến đỉnh n trong đường tròn. Bạn có thể tạo nửa kia của khuôn mặt (đó là khuôn mặt n ) khi bạn làm điều đó.
1)
2)
3)
4)
Kết quả cuối cùng:
Bạn cũng có thể tạo các cạnh và mặt khi bạn chạy vòng lặp tạo vòng tròn. Cùng phức tạp, cùng một điều. Tạo một đỉnh trên vòng tròn, lưu nó vào mảng đỉnh của bạn, thêm cạnh tương ứng (cặp chỉ số) vào mảng các cặp chỉ số nếu bạn cảm thấy thích và cuối cùng thêm mặt tương ứng vào mảng ba chỉ số của bạn . Chuyển sang đỉnh tiếp theo.
Hình trụ và ống: không thực hiện cùng một công việc hai lần và quads
Một lần nữa, đối với ống, nó bắt đầu với một đỉnh và một vòng tròn sẽ là tâm của đĩa trên cùng hoặc dưới cùng của hình trụ:
- Tạo một đỉnh.
- Tạo một vòng tròn quanh đỉnh. Thêm các cạnh (nếu bạn muốn các cạnh) giữa các đỉnh liên tiếp của vòng tròn và giữa đỉnh trung tâm và mỗi đỉnh vòng tròn. Thêm các mặt giữa mỗi bộ ba đỉnh được tạo bởi đỉnh trung tâm và hai đỉnh liên tiếp trên đường tròn.
- Sao chép tất cả những thứ đó, dịch bản sao theo hướng vuông góc với cơ sở bạn vừa thực hiện, theo chiều dài của hình trụ mong muốn.
- Liên kết trên cùng và dưới cùng.
Để liên kết đỉnh và đáy, bạn phải tạo các hình tứ giác giữa các cặp đỉnh đối diện nhau. Vì vậy, hãy suy nghĩ trước và tại sao không biến mình thành một hàm làm cho hai mặt tam giác ra khỏi bốn đỉnh?
Làm xong. Lưu ý rằng lần này chúng ta sử dụng thực tế là cùng một cấu trúc (vòng tròn + trung tâm) xuất hiện hai lần trong một hình trụ để đi đường tắt. Chúng ta không phải tạo tất cả các đỉnh, cạnh và mặt bằng tay, trái với hình nón khi cần thiết.
Theo nguyên tắc lười biếng này, bạn cũng có thể tạo một phần tư vòng tròn và nhân đôi nó, và một lần nữa, để tạo một vòng tròn đầy đủ với các phép biến đổi rất đơn giản (hợp lệ với bất kỳ vòng tròn nào cũng vậy với hình nón), nhưng điều đó thực sự quá mức cho một hình dạng không quá phức tạp.
Bạn phải luôn luôn sử dụng các thuộc tính hình học của các đối tượng bạn thực hiện để đơn giản hóa việc tạo ra chúng . Cụ thể, đối xứng và bất biến của chúng .
Đối với hình trụ, chỉ cần không tạo đỉnh cơ sở, chỉ cần tạo vòng tròn, sao chép, dịch bản sao, tạo hình tứ giác, thực hiện.
Hình cầu và viên nang: thêm độ phức tạp, vẫn không cùng một công việc hai lần
Để tạo ra một viên nang, chúng tôi muốn tạo ra một quả cầu UV, chia nó thành hai nửa, dịch nửa đầu và sau đó liên kết hai viên với các cạnh của viên nang.
Một lần nữa, chỉ có thể tạo một phần tám (!!) hình cầu, sau đó nhân đôi nó và đảo ngược nó, sau đó nhân đôi và đảo ngược kết quả ngoại trừ dọc theo một trục khác, v.v., để có được một hình cầu đầy đủ, trong 4 bước (tạo phần tám , nhân đôi và đảo ngược ba lần). Có thể quá mức cần thiết, nhưng ít hơn so với trong trường hợp của vòng tròn.
Một quả cầu UV đơn giản:
Trên thực tế, chúng tôi chỉ tạo ra một nửa của nó (ví dụ), sao chép một nửa, lật ngược bản sao và dịch nó theo chiều dài của viên nang:
Chúng tôi liên kết nửa trên và dưới:
Công việc thực sự (phần nào) đến từ lượng giác đi vào việc tạo ra một hình cầu. Tập hợp tất cả các đỉnh thuộc một quả cầu UV có thể được mô tả là tập hợp tất cả các điểm có dạng:
Trong đó R là bán kính của hình cầu và, đối với một số nguyên dương chẵn N , chúng ta có hằng số
θ = × π / N ,
k và n là các số nguyên với k thay đổi từ 0 đến 2N-1 và n thay đổi từ -N / 2 đến + N / 2 .
Để tạo một nửa hình cầu hoặc một hình cầu, bạn phải hạn chế tập hợp các giá trị được lấy bởi k và n .
Nếu k là số thực và không chỉ là số nguyên, bạn sẽ có được một hình cầu, không chỉ các đỉnh trên bề mặt của nó. Vì vậy, những gì chúng tôi đã làm ở đây là rastering phương trình bề mặt của nguyên thủy .
Hình xuyến đáng sợ : thật dễ dàng sau tất cả những gì chúng ta đã thấy!
Một lần nữa, lượng giác nhiều hơn, nhiều đỉnh hơn, nhiều góc hơn, nhiều đối xứng hơn, nhiều bất biến hơn ... nhiều hình học hơn! Tìm ra phương trình cho bề mặt của hình xuyến, "rasterize nó" đúng cách, đơn giản hóa vấn đề bằng cách sử dụng các đối xứng (hiển nhiên) của hình xuyến và cuối cùng, lặp qua tập các đỉnh bạn vừa xác định và tạo các cạnh và mặt như bạn đi!
Xem? Hoàn toàn đơn giản.