Cubos e mais cubos

... em OpenSCAD

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.gif
para 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

1.

Sim, estou a usar modo scad para o Emacs: https://nexp.pt/scad-mode.html

Palavras chave/keywords: OpenSCAD, Emacs, animation

Criado/Created: 02-10-2020 [21:35]

Última actualização/Last updated: 10-10-2022 [14:25]


Voltar à página inicial.


GNU/Emacs Creative Commons License

(c) Tiago Charters de Azevedo