Utah czajniczek , pierwotnie stworzony przez Martina Newell, to wygodny obiekt do testowania programów graficznych 3D.
Zadanie polega na utworzeniu obrazu czajnika w formie szkieletowej w rzucie perspektywicznym. Aby zachęcić do idei aplikacji kodu źródłowego , przeglądanie i sterowanie kamerą mogą być izolowane i wykluczane z liczenia. Dzieje się tak, aby parametry i plik wejściowy mogły zostać zmodyfikowane, a kod ponownie wykorzystany do wygenerowania różnorodnych obrazów, ale nie jest konieczne tworzenie pełnoprawnego narzędzia, które akceptuje skomplikowane argumenty wiersza polecenia lub podobne. Poszukiwana jest równowaga „hackerska”.
ref. StackOverflow: Jak działają łatki Beziera w czajniku Utah?
Są tutaj trzy podzadania:
- odczytu w danych czajniczek w jego oryginalnym formacie .
- podziel dane łatki za pomocą podziału deCasteljau lub innej metody. Inne metody wykorzystują macierze bazowe Beziera i oceniają wielomiany (standardowe referencje, takie jak Foley i van Dam, Newmann i Sproull) lub metody bazowe Bernsteina (które wciąż są poza mną).
- rzutuj punkty na 2D (jeśli język nie obsługuje natywnie 3D) i narysuj kontur każdej małej łaty widzianej z punktu oka, którego widok jest wyśrodkowany na punkcie LookAt i którego oś pionowa jest wyrównana z pionową osią czajnika (tj. narysuj „pionowo” z ładnego punktu widzenia).
Zakładając, że odczyt danych tekstowych zorientowanych liniowo z pliku nie stanowi większego problemu, to wyzwanie polega na praktycznym zapoznaniu się z danymi łatki Bi-Cubic Beziera.
Ponieważ zwykły zwykły test wyrównywania powierzchni tylnej nie jest wystarczający (wszystkie łaty nie są skierowane na zewnątrz), nie jest konieczne usuwanie linii ukrytych ani powierzchni. Jako model szkieletowy powinien wyglądać dobrze z widocznym tyłem. Wygląd można poprawić, dostosowując szerokość linii w zależności od odległości od oka, ale nie jest to absolutnie konieczne (moje własne programy tego nie robią).
Jest to zarówno golf golfowy, jak i kamień z rozetą . Odpowiedzi rywalizujące w golfie powinny zawierać normalną liczbę. Ale zachęty do składania w nietypowych językach są bardzo zachęcane, nawet jeśli nie są szczególnie krótkie.
Dla entuzjastów złożoności Kołmogorowa istnieje bardziej zwięzły zestaw danych, w którym pełny zestaw można odtworzyć poprzez dodanie rotacji i odbicie lustrzane łat. A w Jima Blinna A Trip Down the Graphics Pipeline istnieje jeszcze bardziej zwięzła metoda generowania, wykorzystując fakt, że poszczególne łatki mają symetrię obrotową lub inną. Całe ciało (lub pokrywkę) można opisać pojedynczą krzywą Beziera, która jest obracana wokół osi y. Dziobek i uchwyty można opisać za pomocą dwóch krzywych ich profilu, a następnie wybierając pośrednie punkty kontrolne w celu przybliżenia wyciągnięcia kołowego.
źródło
glutSolidTeapot
iglutWireTeapot
!glutWireTeapot
.Odpowiedzi:
Przetwarzanie (Java), 314 (237 bez sterowania kamerą)
Bez definicji tablic:
Definicje tablic danych:
Bardziej czytelna wersja:
I kilka zdjęć:
Kolejna wersja z interesującymi efektami:
źródło
stroke(-1)
jest o jeden bajt krótszy niżstroke(255)
Postscriptum
Nie w pełni golfowy, ale ilustruje to inne podejście niż w deCasteljau: ocena bazowego wielomianu. Używa mat.ps .
1112
Usunięcie linii pionowych i zdyskontowanie parametrów daje tę wersję 1112 znaków. Używa mat.ps .
źródło