나는 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;
슬라이더는 구의 수를 제어합니다.
이것은 호출 된 디스플레이 목록의 여러 레이어를 사용합니다. littlest 목록 인 "sphere"는 단일 구를 보유하지만보다 복잡한 객체를 보유 할 수 있습니다. "구"목록은 슬라이더가 움직일 때 다시 작성되는 목록입니다. JSL 루프가 슬라이더가 움직일 때 필요 이상으로 열심히 일할 필요가 없도록 합리적으로 간단하게 유지하십시오. "구체"는 주 디스플레이 목록에서 (아크볼을 통해) 호출됩니다. 주의해야 할 또 다른 사항 : 호출 된 목록은 호출 된 목록에 로컬로 번역 (등)을 유지하지 않습니다. 호출 된 목록이 개체를 변환하고 해당 번역을 실행 취소하지 않으면 호출 된 목록이 완료된 후에도 번역이 유효합니다. 그것이 푸 메트릭스와 팝 매트릭스가 사용 된 이유입니다.