Skip to main content
Working from scratch, following simplicity

Ambienti 3D nei PDF con LaTeX e U3D

Ho voluto sperimentare, con risultati modesti a dire la verità, l'utilizzo di LaTeX per l'inserimento di oggetti 3D nei PDF. I maggiori problemi li ho riscontrati nella conversione in U3D dei miei lavori tridimensionali, mentre la scrittura del file TEX e la sua compilazione una volta caricato il pacchetto movie15 e lette le istruzioni che lo accompagnano, semplici e ben spiegate, è andata subito a buon fine.

Gli elementi principali per dotare i propri PDF di immagini interattive in 3D sono i seguenti:

  • il pacchetto movie15 che fornisce un'interfaccia per incorporare filmati, suoni e oggetti 3D in documenti PDF da usare con LaTeX e pdflatex.
  • U3D, un formato libero scalabile finalizzato alla condivisione e visualizzazione di progetti 3D interattivi, provenienti dai settori del CAE (Computer-Aided Engineering) e del CAM (Computer-Aided Manufacturing)[fn]Fonte Wikipedia[/fn].

Conversione in U3D

Nel precedente articolo avevo utilizzato X3D come formato di riferimento e mi ero limitato a esportare i miei lavori usando l'add-on già presente in Blender senza riscontrare alcuna difficoltà. In questo caso però le cose si complicano perché non esiste per questo software, un esportatore di default e quello che si trova in rete pur essendo aggiornato all'ultima versione (la 2.64 nel momento in cui scrivo) e apparentemente funzionante, esporta U3D incompatibili con Adobe Reader (l'errore che mi genera a video è “A 3D data parsing error has occured.” e quindi non carica a video alcunché).

Come fare allora? Sempre con Blender si può esportare in Collada (.DAE) o STL, lasciando grossomodo le impostazioni di default e poi sistemare e convertire il tutto con MeshLab disponibile a questo indirizzo.

Ho riscontrato però una lacuna nella versione disponibile nei repository per Ubuntu 12.04 e in quella più aggiornata, cioè manca l'eseguibile per convertire in U3D come segnalato dal programma stesso: Missing converter executable '/usr/bin/IDTFConverter'. E anche seguendo le istruzioni presenti qui e compilando il tutto non si va molto distante perché l'eseguibile regolarmente prodotto va in segmentation fault!

Soluzione: Wine con l'installazione dell'ultima versione per Windows. Non è reattiva e scattante come quella nativa ma funziona e mi ha permesso sia di importare i file generati con Blender (questo lo faceva anche la versione per linux), sia di esportarli in X3D, con la gradita sorpresa di scrivermi anche il file tex. Per cui basta compilare due o più volte con pdflatex e si può già ottenere un PDF perfettamente funzionante.

Ottimizzazioni LaTeX

Il PDF creato però presenta due grossi inconvenienti:

  1. bisogna opportunamente ruotare, dimensionare e spostare l'oggetto e magari cambiare il tipo di luce e render, aggiornando poi le relative nuove coordinate e impostazioni;
  2. nei browser non compatibili non si vede alcuna immagine e si legge soltanto il collegamento al file .u3d, invece in Adobe Acrobat bisogna attivare il contenuto come riportato nelle immagini sotto.

Come sempre presenterò un esempio pratico per non dilungarmi in lunghe e logorroiche spiegazioni e per fornire passo passo la strada più agevole che ho seguito per avere un PDF compatibile con tutti i reader e con l'oggetto 3D ben posizionato e illuminato.

Esempio pratico

Utilizzo il file blender che avevo creato per gli articoli sul dissabbiatore longitudinale, seleziono tutti gli oggetti presenti (CTRL+A) e li esporto in STL da File -> Export -> STL_(.stl), nominandolo dissabbiatore.stl.

Carico il programma MeshLab e importo il file STL appena creato da File -> Import Mesh, vedo se ha caricato tutto e poi esporto con File - > Export Mesh As ... - > U3D File format (.U3D), chiamo il file dissabbiatore_meshlab.u3d e contestualmente il programma crea un file dissabbiatore_meshlab.tex così descritto:

\documentclass[a4paper]{article}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}
\begin{document}
\includemovie[
	poster,
	toolbar, %same as `controls'
	label=dissabbiatoremeshlab.u3d,
	text=(dissabbiatoremeshlab.u3d),
	3Daac=60.000000, 3Droll=0.000000,
	3Dc2c=0.613500 -7.545900 0.855200,
	3Droo=7.618947,
	3Dcoo=0.613470 0.649878 -0.855214,
	3Dlights=CAD,
]{\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}
\end{document}

Ci aggiungo la seguente riga:

\movieref[3Dcalculate]{dissabbiatoremeshlab.u3d}{Click here!}

Come spiegato nell'appendice 3D quick-start guide della guida al pacchetto di movie15. Ecco il file definitivo:

\documentclass[a4paper]{article}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}
\begin{document}
\includemovie[
	poster,
	toolbar, %same as `controls'
	label=dissabbiatoremeshlab.u3d,
	text=(dissabbiatoremeshlab.u3d),
	3Daac=60.000000, 3Droll=0.000000,
	3Dc2c=0.613500 -7.545900 0.855200,
	3Droo=7.618947,
	3Dcoo=0.613470 0.649878 -0.855214,
	3Dlights=CAD,
]{\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}\\
\movieref[3Dcalculate]{dissabbiatoremeshlab.u3d}{Click here!}
\end{document}

Compilo il tutto e apro il file con Acrobat Reader, attivo il contenuto e aggiusto l'ingrandimento dell'oggetto e la sua posizione, come se stessi usando un programma di disegno 3D, poi gioco un po' con le impostazioni delle luci e del render, tutte attivabili dal menu a tendina che compare una volta cliccato sopra l'oggetto con il tasto destro del mouse (all'interno del menu Viewing Options). A lavoro finito clicco su Clik here! e copio il contenuto della finestra Javascript Window in un nuovo file chiamato dissabbiatore_final.tex[fn]Per la scrittura di questo file TEX ho preso spunto da 3D interactive graphics in PDF Tutorial[/fn], che sarà così definito:

\documentclass[a4paper]{article}
\usepackage{epsfig,rotating,amsmath,subfigure}
\usepackage{natbib}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}

\begin{document}
\includemovie[poster,
	      toolbar,
	      label=pt,
	      text={\includegraphics[scale=1.0]{dissabbiatore.png}},
              3Droo=6.896200246789337,
              3Daac=60.000001669652114,
              3Dcoo=0.6134188175201416 0.6502023935317993 -0.8552163243293762,
              3Dc2c=-0.8354106545448303 0.3235208988189697 -0.44432342052459717,
              3Droll=-75.5946486014902,
              3Dlights=Hard,
              3Drender=SolidOutline]
              {\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}\\
A 3D, schematic model of a horizontal grit chamber. If the Figure does not appear interactive, please enable this function and click on it or use a recent version of \href{http://get.adobe.com/reader}{Adobe Reader}.
\end{document}

Nel file tex ho anche aggiunto l'immagine 2D (per ragioni di compatibilità con gli altri lettori PDF) e una sommaria descrizione di come attivare l'effetto interattivo. Qui invece ho compresso tutti i file, in particolare TEX e PDF, che compaiono nell'articolo:  pdf_3D.zip

Add new comment

The content of this field is kept private and will not be shown publicly.

Plain text

  • No HTML tags allowed.
  • Web page addresses and email addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Add new comment

The content of this field is kept private and will not be shown publicly.

Plain text

  • No HTML tags allowed.
  • Web page addresses and email addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Sponsored Links
Pubblicità

Nicola Rainiero

A civil geotechnical engineer with the ambition to facilitate own work with free software for a knowledge and collective sharing. Also, I deal with green energy and in particular shallow geothermal energy. I have always been involved in web design and 3D modelling.