Сегодня после более чем двухлетнего перерыва вышла версия 1.5.1 блистательной программы для полигонального моделирования Wings3D.
Уверен, что на этом форуме не найдётся человека, который хоть раз бы её запускал, поэтому список нововведений приводить смысла нет. Скажу только, что с этого релиза крылья обзавелись 64-битной версией.
Если вы хотите увидеть то, у чего долгие годы с неистовым чмоканьем сосали полигональные инструменты блендера и даже майи, вам в Wings3D! И ведь обсосано ещё не всё.
Если вас приводит в уныние интерфейс блендера, макса и майи, вам в Wings3D! Там вообще нет интерфейса.
Если вам не хочется выкачивать гигабайты, чтобы немножко помоделить пропиков, вам в Wings3D! Жалких 14 мегабайт.
Если вы не верили, что неигрушечная программа интерактивной графики может быть не на C++, вам в Wings3D! Erlang, мать его.
Если... ай да што там, вам в Wings3D!
Пользовался им немного. Так и не понял, как делать что-нибудь вроде Snap to grid (кажется, так это называлось в хаммере). А старательно водить мышкой/вбивать числа руками не хочется. Но вообще я не моделлер, может там работать без стягивания объектов к клеткам сетки - это нормально. Мне по сути и нужно то было выполнить работу в стиле "расположить кубики на равном расстоянии друг от друга".
Интерфейс в Крыльях суровый конечно. Erlang, что сказать.
Björn Gustavsson писал: Why is Wings implemented in Erlang and not in C or C++?
I did not know that Wings would be so popular that other people would want to help developing it or trying to write importers for the Wings file format. I just wanted a decent 3D modeler for my own use.
I started implementing Wings because it was not possible buy Nendo at the time (in 2001). I wanted to do some 3D modeling and I had played around with the Nendo demo and liked it. I realized that implementing multiple Undo would be trivial in a functional language (Nendo had one level of Undo).
C/C++ was out from the start. I wanted a language with automatic memory handling so that I didn't have to worry about allocating/freeing memory myself, and I didn't want to spend a lot of time in low-level debugging to find pointer errors and memory leaks (I do enough of that in my day work, so I didn't want to do that in my spare time too).
My idea for implementing multiple Undos would not work in Java, so Java was also out.
Since I know Erlang very well (since I work with Erlang's run-time system and Erlang compiler in my day work), Erlang was the natural choice.
Other possible choices would have been Scheme or Lisp, but I don't know those languages nearly as well as I know Erlang. (Although Scheme and Lisp can be used in a functional style, they can be used in an imperative style as well; the mix of imperative and functional style (properly used) could have had advantages. A disadvantage with Lisp/Scheme is that there is no pattern matching.) An interesting language if I had started today would be Haskell.
EDIT: Обратите внимание, как он плодит скобки, когда начинает писать про схему и лисп.