Aggiornamenti per chi fosse interessato:
Ho dato una bella pulita e riorganizzata a tutto il codice Lua ed ora con un codice come il seguente:
`% !TEX encoding = UTF-8
% !TEX program = LuaLaTeX
% !TEX spellcheck = en_GB
\documentclass{standalone}
\usepackage{tikz}
\directlua{
require “math”
dofile(“BasicFunctions.lua”)
dofile(“CreateObjects.lua”)
dofile(“3Dfunctions.lua”)
dofile(“PrintTikZfunctions.lua”)
}
\begin{document}
\begin{tikzpicture}[line join=round]
\directlua{
eye = {5,5,4}
look_at = {1,3,2}
theta = 0
lp = 7
pavimento = Polygon({-lp,-lp,0},
{ lp,-lp,0},
{ lp, lp,0},
{-lp, lp,0})
Hlegs = 5
gamba1 = Parallelepiped({-(lp-1),-(lp-1),0},{.7,.7,Hlegs})
Relica = .7
elica1 = ParametricCurve(“t”,”-5.65+”..Relica..”*math.cos(2*math.pi*t)”,
“-5.65+0.7*math.sin(2*math.pi*t)”,
“5*t/(2*math.pi)”,
0,
2*math.pi,
150)
gamba2 = translate(gamba1,{11,0,0})
gamba3 = translate(gamba1,{11,11,0})
gamba4 = translate(gamba1,{0,11,0})
tavola = Parallelepiped({-6.5,-6.5,Hlegs},{13,13,.5})
base_vaso = Arc(.25,{1,2,5.5},360,10)
vaso = Cylinder(base_vaso.points,{0,0,1},1)
ellissoide = Ellipsoid(1.5,1,.5,{0,-4,6},20,5)
ellissoide = rotate(ellissoide,{0,-4,6},{0,0,1},30)
sfera = Sphere(.5,{0,4,6},20,5)
sfera = rotate(sfera,{0,4,6},{1,1,0},30)
scena = CreateScene(“pavimento”,
“gamba1″,”gamba2″,”gamba3″,”gamba4”,
“tavola”,”sfera”,”ellissoide”,”vaso”)
PrintTikZ(eye,look_at,theta,scena)
}
\end{tikzpicture}
\end{document}`
ottengo:
La differenza rispetto a prima è il fatto che non vengono stampati i poligoni le cui normali non sono rivolte verso l’osservatore.
L’obbiettivo ora è di stampare gli oggetti in modo ordinato in modo da nascondere le zone nascoste da oggetti che si trovano più vicino all’osservatore.
Successivamente vorrei aggiungere l’opzione della prospettiva.
Domanda: c’è un modo per tenere le variabili che si creano solamente dentro un \directlua senza renderle globali?
Saluti
Michele
