home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-11-13 | 3.8 KB | 108 lines |
-
- // Copyright (c) 1997 Microsoft Corporation
-
- import com.ms.dxmedia.*;
- import java.net.*;
-
- class UnionModel extends Model {
-
- public static ImageBvr geometryImage(GeometryBvr geo) {
- CameraBvr cam =
- perspectiveCamera(toBvr(1),toBvr(0)).transform(translate(0,0,2));
- Transform2Bvr sc = scale2(0.1);
-
- return geo.render(cam).transform(sc);
- }
-
- public static ColorBvr myColor(double hue,
- double saturationRate) {
- NumberBvr sat = add(mul(sin(mul(localTime,
- toBvr(saturationRate))),
- toBvr(0.5)),
- toBvr(0.5));
-
- return colorHsl(toBvr(hue), sat, toBvr(0.5));
- }
-
- public void createModel(BvrsToRun blst) {
-
- // Make these relative
- URL mediaBase = getImportBase();
- URL geoBase = buildURL(mediaBase,"geometry/");
- URL sndBase = buildURL(mediaBase,"sound/");
-
- GeometryBvr rawSphere = importGeometry(buildURL(geoBase,"sphere.x"));
- GeometryBvr rawCube = importGeometry(buildURL(geoBase,"cube.x"));
- GeometryBvr rawCylinder = importGeometry(buildURL(geoBase,"cylinder.x"));
- GeometryBvr rawCone = importGeometry(buildURL(geoBase,"cone.x"));
- // Import a sound, supply null as the second argument since we don't
- // want a length.
- SoundBvr snd = importSound(buildURL(sndBase,"etherial.mp2"), null).loop();
-
- Transform3Bvr scaler = scale3(0.25);
-
- GeometryBvr sphere = rawSphere.transform(scaler);
- GeometryBvr cube = rawCube.transform(scaler);
- GeometryBvr cone = rawCone.transform(scaler);
- GeometryBvr cylinder = rawCylinder.transform(scaler);
-
- GeometryBvr xcone = cone.transform(rotate(xVector3,
- toBvr(Math.PI)));
-
- ColorBvr col1 = myColor(0, 2);
- ColorBvr col2 = myColor(0.25, 3);
- ColorBvr col3 = myColor(0.5, 4);
- ColorBvr col4 = myColor(0.75, 1);
-
- // Shapes to start with (many with time varying colors)
- GeometryBvr shapes[] = { sphere.diffuseColor(col1),
- sphere.diffuseColor(col1),
- cone.diffuseColor(col2),
- xcone.diffuseColor(col2),
- cube.diffuseColor(col3),
- cube.diffuseColor(col3),
- cylinder.diffuseColor(col4) };
-
- // Places to translate them to.
- double tls[][] = { { 0.75, 0, 0 },
- { -0.75, 0, 0 },
- { 0, 0.75, 0 },
- { 0, -0.75, 0 },
- { 0, 0, 0.75 },
- { 0, 0, -0.75 },
- { 0, 0, 0 } };
-
- // Go ahead and accumulate up the translated geometry by cycling
- // through the arrays.
- GeometryBvr geo = emptyGeometry;
- for (int i = 0; i < shapes.length; i++) {
- Transform3Bvr xf = translate(tls[i][0],tls[i][1],tls[i][2]);
- geo = union(geo, shapes[i].transform(xf));
- }
-
- // Set the whole thing in motion
- Transform3Bvr xf =
- compose(rotate(xVector3, localTime),
- compose(rotate(zVector3, mul(localTime, toBvr(1.9))),
- compose(rotate(yVector3, mul(localTime, toBvr(Math.PI))),
- scale3(0.75))));
-
- geo = geo.transform(xf);
-
- // Render into an image, and overlay atop a solid image.
- ImageBvr geoIm = geometryImage(union(geo, directionalLight));
-
- ImageBvr model = overlay(geoIm, solidColorImage(white));
-
- setImage(model);
- setSound(snd);
- }
- }
-
- public class Union extends DXMApplet {
- public Union() { setModel(new UnionModel()) ; }
- }
-
-
-
-