Cubos e mais cubos
Há muito tempo que não fazia uma brincadeira destas: fazer uma animação em OpenSCAD.
A maneira mais simples é gerar uns quantos PNG, com a opção de animação do OpenSCAD, e depois usar o imagemagick com o comando
convert -delay 10 *.png anim.gifpara gerar um GIF e depois o
ffmpeg
ffmpeg -i anim.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4
para gerar o MP4.
Mas há questão da resolução do output do OpenSCAD porque queria gerar
um GIF com 1920x1080
. Claro que o Openscad pode ser usado na linha de
comando e com uma função em ELISP
(defun scad-anim() (interactive) (setq i 0.0) (while (< i 100.0) (shell-command (concat "openscad-nightly " (buffer-name) " --imgsize=680,680 --export-format png -o 00" (if (eql (/ (floor i) 10) 0) (concat "0" (number-to-string (floor i))) (number-to-string (floor i))) ".png -D t=" (number-to-string (* .01 i)))) (setq i (+ i 1))))gera-se as
100
imagens para a animação1.
O código em Openscad é o seguinte e está sob uma licença GPLv3
m=799; v=[for (i=[0:m])rands(0,1,3,i)]; t=1; module rotobj(t=0){ lc=5; rotate([t*360,t*360,t*360]) color("white") cube(lc*[1,1,1],center=true);} translate([(-300+t*500),0,-600]) rotate(t*v[1]*360) rotate([0,60,90]) scale(2*[1,1,1]) color("red") import("Voyager_17.stl"); rotate([t*20,-t*5,t*10]){ lcube=10000; translate([0,0,-1000]) color([0/255,0/255,0/255]) cube([lcube,lcube,1],center=true); ls=16; for(i=[0:m]){ translate(ls*([ls*(.5-v[i][0]),ls*(.5-v[i][1]),ls*(.5-v[i][2])])){ rotate(v[i]*360) rotobj(t);}} } $vpt=[0,0,0]; $vpr=[0,0,0]; $vpd=300;
Happy hacking!
P.S.
A Voyager que aparece em background é daqui: https://nasa3d.arc.nasa.gov/detail/jpl-vtad-voyager
Sim, estou a usar modo scad
para o Emacs: https://nexp.pt/scad-mode.html
Criado/Created: 02-10-2020 [21:35]
Última actualização/Last updated: 10-10-2022 [14:25]
(c) Tiago Charters de Azevedo