Sono nuovo di programmazione JSL e Opengl e mi chiedevo di nascondere gli oggetti. Se inizialmente ho più sfere in una scena, voglio che l'utente sia in grado di usare un cursore per specificare il numero di sfere nella scena e aggiornarlo di conseguenza. C'è un modo per nascondere o eliminare oggetti?
L'elenco di visualizzazione non ha alcuna logica propria (per nascondere / mostrare); è necessario ricostruire le liste di visualizzazione per mostrare ciò che si desidera.
sphere = Scene Display List();
sphere << sphere( .15, 15, 15 );
spheres = Scene Display List();
makespheres = Function( {n},
spheres << clear;
For( i = 1, i < n, i++,
spheres << color( i / n, 1 - i / n, .9 ); // .1,.1,.1 = almost black .9,.9,.9 = almost white
spheres << pushmatrix;
spheres << translate( (i - (n / 2)) / 3, 0, 0 );
spheres << calllist( sphere );
spheres << popmatrix;
);
);
Scene = Scene Box( 600, 600 );
Scene << backgroundcolor( 0 ); // black=0, gray=1, white=2
Scene << showarcball( always );
nspheres = 14;
makespheres( nspheres );
New Window( "x",
Scene,
Slider Box(
1,
20,
nspheres,
makespheres( nspheres );
scene << update;
)
);
Scene << perspective( 45, .2, 20 );
Scene << Translate( 0.0, 0.0, -4.5 );
Scene << arcball( spheres, 1.5 );
Scene << update;
Il cursore controlla il numero di sfere
Questo utilizza diversi livelli di elenchi di visualizzazione chiamati. La più piccola lista, "sfera", contiene solo una singola sfera, ma potrebbe contenere un oggetto più complicato. L'elenco "sfere" è l'elenco che viene ricostruito quando si sposta il cursore; mantienilo il più semplice possibile, quindi il ciclo JSL non deve lavorare più del necessario quando si sposta il cursore. "Spheres", a sua volta, viene chiamato (via arcball) dall'elenco principale del display. Un'altra cosa da notare: gli elenchi chiamati non mantengono le traduzioni (ecc.) Locali nell'elenco chiamato. Se una lista chiamata traduce un oggetto e non annulla quella traduzione, la traduzione è ancora valida quando l'elenco chiamato viene eseguito. Ecco perché sono stati usati pushmatrix e popmatrix.