// // DirectX Media Windowless Control Template // Copyright (c) 1997, Microsoft Corporation // // // // This template demonstrates how to construct an animation that // makes use of IE4 windowless controls. It illustrates the following: // - Using the modelmaker applet // - Using the dxactrl (DirectAnimation windowless control) // - Constructing the model and passing it to the control // import com.ms.dxmedia.*; import ie4winless_module.*; // This gets ReactiveCube import java.net.*; // When designing windowless controls, the Java applet is used purely to construct // the model. At runtime, hand the finished model over to the windowless // control to be displayed. class WindowlessModel extends Model { public void createModel(BvrsToRun blist) { // Create any type of animation you like here... it is completely up to you // what goes into the model. // URL mediaBase = getImportBase(); URL geoBase = buildURL(mediaBase, "geometry/"); URL imgBase = buildURL(mediaBase, "image/"); URL sndBase = buildURL(mediaBase, "sound/"); // Here, the ReactiveCube module is used to create an // animated cube which scales up from zero and reacts to the mouse // Create a camera CameraBvr Cam = perspectiveCamera(toBvr(1),toBvr(0)).transform( translate(0,0,40) ); // Create some lighting GeometryBvr lightGeo = directionalLight.transform(translate(0,0,4)); // Import the images used for the faces ImageBvr[] faces = { importImage(buildURL(imgBase, "hiddenBeachSG.jpg")), importImage(buildURL(imgBase, "hiddenBeachSS.jpg")), importImage(buildURL(imgBase, "arches.jpg")), importImage(buildURL(imgBase, "foliageUtah.jpg")), importImage(buildURL(imgBase, "tulipsHol1.jpg")), importImage(buildURL(imgBase, "redWoodCar.jpg")) }; // Import a click snd SoundBvr clickSnd = importSound(buildURL(sndBase, "fishbuck.mp2"), null); // Instantiate a new ReactiveCube ReactiveCube cube = new ReactiveCube(faces, clickSnd); // Put some rotations on the cube to make it interesting GeometryBvr cubeGeo = cube.getGeometryBvr(mediaBase).transform(compose(compose( rotate(vector3(1,1,1),localTime), rotate(vector3(toBvr(Math.random()),toBvr(Math.random()),toBvr(Math.random())), div(localTime,toBvr(2)))), rotate(vector3(-1,1,-1),localTime))); // merge the lighting and cube geometry cubeGeo = union(cubeGeo, lightGeo); // Make the cube hide or show when clicked: // First, declare a number which will go from 0 to 1 in 2 seconds NumberBvr grow = slowInSlowOut(0,1,2,1); // Second, declare and initialize a recursive number which goes from 0 to 1 // and back to 0 again on each rightButtonDown event NumberBvr size = NumberBvr.newUninitBvr(); size.init(until( grow, rightButtonDown, until( sub(toBvr(1),grow), rightButtonDown, size ))); // Third, have the cube scale up from zero initially and then start the previous behavior NumberBvr start = (NumberBvr)until( toBvr(0), timer(toBvr(2)), size ); // Now apply it to the cube as a scale cubeGeo = cubeGeo.transform(scale3(start)); // // The image is simply the rendered cube without any background. // Since you want to overlay the windowless control with other HTML // elements, specifically avoid a solidColor background. setImage(cubeGeo.render(Cam)); setSound(cube.getSoundBvr()); } } // Here is the important part, rather than extending DXMApplet as usual, // extend ModelMakerApplet. Aside from the name, the construction // is exactly the same as if you were doing a normal applet. public class WindowlessApplet extends ModelMakerApplet { public void init() { // Always call the super classes init first to ensure codeBase is set. super.init() ; // Now set the model. setModel (new WindowlessModel()); } } //