Tạo hình học thủ tục


10

Gần đây tôi đã xem xét SceneKit cho OS X và nhận thấy rằng có một số phương pháp xuất xưởng để tạo các hình dạng hình học như:

Hộp, viên nang, hình nón, hình trụ, mặt phẳng, hình chóp, hình cầu, hình xuyến và ống.

Tôi quan tâm đến việc thêm các hình dạng nguyên thủy như vậy vào trình kết xuất của mình nhưng đang loay hoay tìm bất kỳ nguồn hợp lý nào để tôi có thể thu thập sự hiểu biết về việc tạo thủ tục. Có một số tài nguyên mô tả chi tiết lý thuyết, nhưng thiếu mã nguồn thích hợp để sao lưu.

SceneKit cung cấp các phương thức xuất xưởng cho phép tự động thiết lập các thuộc tính của các hình dạng đó. Trong trường hợp của Hộp, bạn có thể cung cấp các giá trị nguyên cho số phân đoạn chiều rộng, chiều cao và chiều sâu mà mỗi mặt nên được chia thành.

Tôi hiểu lý thuyết nhưng thiếu kiến ​​thức để bắt đầu phân chia khuôn mặt hình học để đạt được hiệu quả mong muốn.

Các đỉnh cho mỗi hình dạng rất có thể khá dễ dàng để tạo ra trong các vòng đơn giản. Điều làm tôi bối rối là biết cách tạo ra các khuôn mặt, hay đúng hơn là tọa độ kết cấu phù hợp cho từng khuôn mặt. Định mức có thể được tính trên mỗi khuôn mặt vì vậy tôi khá tự tin Tôi có thể đạt được những gì tôi muốn, đó chỉ là biết bắt đầu từ đâu.

Bất cứ ai có thể cung cấp bất kỳ chi tiết về hình học thủ tục? Những gì tôi thực sự cần là một số mã nguồn để lượm lặt một số thông tin từ. Tôi đã tìm kiếm cao và thấp cho các hướng dẫn nhưng cho đến nay chỉ đến một vài trang web hoặc blog hợp lý. Bất kỳ cuốn sách tốt, hướng dẫn, blog hoặc tài liệu nghiên cứu sẽ được đánh giá cao.

Chỉnh sửa dựa trên ý kiến

Tôi nên làm rõ rằng tôi biết cách tạo các đỉnh cho các hình cơ bản, hầu hết có thể đạt được bằng các vòng đơn giản. Điều tôi không hiểu là làm thế nào để tạo khuôn mặt từ mảng đỉnh được tạo. Làm cách nào để tạo một dải tam giác hoặc tam giác từ một đỉnh dường như không có thứ tự?

Tôi giả định rằng một khi tôi vượt qua điểm này, tôi có thể tạo ra các quy tắc từ mỗi khuôn mặt. Trong khi tôi chưa đi sâu vào vấn đề này, tôi đã thấy rất nhiều tài liệu tham khảo về điều này và chắc chắn nó sẽ đủ dễ thực hiện.

Lý tưởng nhất là tôi muốn có thể tạo hình học từ một tập các thuộc tính nhất định, chẳng hạn như cách mà SceneKit cung cấp. Với SceneKit đã làm điều đó và bạn có thể làm những điều tương tự trong Blender và Maya, v.v., tôi cho rằng tôi không cố gắng thực hiện những điều không thể.

Các khía cạnh cuối cùng sẽ được áp dụng kết cấu. Một lần nữa, đây không phải là điều tôi đã thực hiện nhưng đã đọc và nhận thức được các yêu cầu.

Vấn đề chính ở đây là tôi biết những gì tôi muốn đạt được nhưng đang đấu tranh để giải mã cách thực hiện cho các nguyên thủy đã nói ở trên. Tôi đã hy vọng rằng tôi sẽ có thể tìm thấy một số kiến ​​thức cơ bản bằng mã nguồn nhưng tôi thực sự không tìm thấy bất cứ điều gì phù hợp cho đến nay.


Bạn nói rằng vấn đề của bạn là phân chia hình học, nhưng sau đó bạn nói việc tạo các đỉnh sẽ dễ dàng, và sau đó bạn nói vấn đề của bạn là làm thế nào để tạo khuôn mặt, và sau đó bạn nói vấn đề của bạn là ánh xạ kết cấu. Vấn đề của bạn là gì? Bạn có thể tạo các vị trí đỉnh? Bạn có thể tạo ra các cạnh và khuôn mặt? Ngoài ra, tọa độ kết cấu phụ thuộc vào kết cấu của bạn và những gì bạn muốn đạt được với nó, vì vậy câu hỏi về tọa độ kết cấu không phải là một câu hỏi hay. Cuối cùng, thế hệ nguyên thủy chỉ đơn giản là về hình học và mọi người hiếm khi gọi nó là "hình học thủ tục" mặc dù đó là những gì nó là.
jrsala

Tôi hiểu làm thế nào để tạo hình học cho các hình dạng đơn giản như hình khối hoặc mặt phẳng, đó là việc tạo ra các khuôn mặt mà tôi không hiểu. Làm thế nào để tôi tạo ra các khuôn mặt từ một loạt các đỉnh? Vẽ các điểm cho các hình dạng phức tạp hơn là một phần của vấn đề mặc dù tôi có hiểu biết cơ bản. Dán tất cả chúng lại với nhau thành một dải tam giác hoặc hình tam giác là những gì tôi đang vật lộn để quấn đầu.
CaptainRedmuff

OK, cảm ơn vì chi tiết. Bạn có thể muốn chỉnh sửa câu hỏi của bạn để làm rõ. Trả lời thời gian!
jrsala

Câu trả lời:


11

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 :

  1. Tạo hai đỉnh riêng biệt.
  2. 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 ).
  3. 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 đó.
  4. 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) Hai đỉnh 2) và một vòng tròn
3) và khuôn mặt
4) và khuôn mặt
Kết quả cuối cùng:kết quả

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ụ:

  1. Tạo một đỉnh.
  2. 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.
  3. 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.
  4. 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ứngbấ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:
quả cầu

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:
một nửa

Chúng tôi liên kết nửa trên và dưới:
viên con nhộng

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:

điểm

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 ,

kn là các số nguyên với k thay đổi từ 0 đến 2N-1n 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 kn .

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.


Ồ Cảm ơn bạn vui lòng cho một phản ứng chi tiết như vậy và cho rất nhiều ví dụ. Tôi đã không nghĩ đến ý tưởng chỉ cần tạo ra một nửa hình cầu và phản chiếu các yếu tố đối xứng. Rất cám ơn đã dành thời gian để viết bài này theo cách tôi có thể dễ dàng hiểu và hy vọng đưa vào thực tế một cách dễ dàng.
CaptainRedmuff

Không có gì! Tôi xin lỗi không có mã mặc dù.
jrsala

Các phác thảo của các phương pháp là nhiều hơn những gì tôi thực sự cần. Tôi có thể bắt đầu vạch ra kế hoạch hành động từ đó ít nhất:] Tôi không cho rằng bạn có bất kỳ thông tin nào về Hộp / Hình khối có cạnh vát? docs.autodesk.com/3DSMAX/15/ENU/3ds-Max-Help/images/...
CaptainRedmuff

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.