Ich bin neu in JSL-Programmierung und Opengl und habe mich gefragt, ob Objekte versteckt werden. Wenn ich zunächst mehrere Kugeln in einer Szene habe, möchte ich, dass der Benutzer in der Lage ist, die Anzahl der Kugeln in der Szene mithilfe eines Schiebereglers festzulegen und diese entsprechend zu aktualisieren. Gibt es eine Möglichkeit, Objekte auszublenden oder zu löschen?
Die Anzeigeliste hat keine eigene Logik (zum Ausblenden / Anzeigen). Sie müssen die Anzeigelisten neu erstellen, um anzuzeigen, was Sie möchten.
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;
Schieberegler steuert die Anzahl der Kugeln
Hierbei werden mehrere Ebenen von Anzeigelisten verwendet. Die kleinste Liste, "Sphäre", enthält nur eine Kugel, könnte aber ein komplizierteres Objekt enthalten. Die Liste "Kugeln" ist die Liste, die beim Verschieben des Schiebereglers neu erstellt wird. Halten Sie es so einfach wie sinnvoll, damit die JSL-Schleife nicht härter arbeiten muss, als sich der Schieberegler bewegt. "Sphären" wiederum wird (über Arcball) aus der Hauptanzeigeliste aufgerufen. Eine andere Sache zu beachten: Die aufgerufenen Listen halten Übersetzungen (etc) nicht lokal in der aufgerufenen Liste. Wenn eine aufgerufene Liste ein Objekt übersetzt und diese Übersetzung nicht rückgängig macht, ist die Übersetzung weiterhin gültig, wenn die aufgerufene Liste abgeschlossen ist. Deshalb wurden die Pushmatrix und die Popmatrix verwendet.