私はJSLプログラミングとOpenglに不慣れで、オブジェクトを隠すことについて疑問に思いました。最初にシーンに複数の球がある場合は、ユーザーがスライダーを使用してシーン内の球の数を指定し、それに応じて更新できるようにします。オブジェクトを隠したり削除したりする方法はありますか?
表示リストには、それ自体のロジック(非表示/表示用)はありません。あなたが欲しいものを見せるためにディスプレーリストを再構築する必要があります。
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;
スライダーは球の数を制御します
これは呼ばれる表示リストのいくつかの層を使用します。最も小さいリスト "球体"はただ1つの球体を保持しますが、もっと複雑なオブジェクトを保持するかもしれません。「球体」リストは、スライダーが動いたときに再構築されるリストです。スライダを動かしたときにJSLループが必要以上に難しく動作する必要がないように、合理的な限り単純にしてください。次に、「球」がメイン表示リストから(arcballを介して)呼び出されます。もう1つ注意すべきことは、呼び出されたリストは変換(など)を呼び出し先リストに対してローカルにしていないことです。呼び出し先リストがオブジェクトを翻訳し、その変換を元に戻さない場合、その変換は呼び出し先リストが完了した時点でまだ有効です。それがpushmatrixとpopmatrixが使われた理由です。