windows-nt/Source/XPSP1/NT/multimedia/danim/doc/homepage/homepage.avr
2020-09-26 16:20:57 +08:00

238 lines
6.1 KiB
Plaintext

// ActiveVRML 1.0 ASCII
use "lib.avr";
use "bitmap.avr";
/*****************************************************************************\
*
* The background
*
\*****************************************************************************/
backBitmap = bitmapFromImport(import("back.gif"));
backImage = imageOf(backBitmap);
backXSize = xsizeOf(backBitmap);
backYSize = ysizeOf(backBitmap);
/*****************************************************************************\
*
* Blinking stars on the background
*
\*****************************************************************************/
brightImage = first(import("bright.bmp"));
dimImage = first(import("dim.bmp"));
starImage(x, y, delay) =
let
s0 = dimImage until after(delay) => function(x) . s1;
s1 = brightImage until after(0.25) => function(x) . s0;
in
transformImage(
translate(
x * backXSize,
y * backYSize
),
s0
);
starsImage =
starImage( 0.9 , 0.1 , 5)
over starImage(-0.8 , -0.8 , 6)
over starImage(-0.1 , 0.75, 9)
over starImage( 0.25, 0.9 , 10);
/*****************************************************************************\
*
* The title letters
*
\*****************************************************************************/
titleImage =
let
titlePos = vector2Xy(-0.5 * backXSize, 0.6 * backYSize);
images =
[
first(import("title0.gif")),
first(import("title1.gif")),
first(import("title2.gif")),
first(import("title3.gif")),
first(import("title4.gif")),
first(import("title5.gif")),
first(import("title6.gif")),
first(import("title7.gif")),
first(import("title8.gif")),
first(import("title9.gif"))
];
zoomImage =
let
number = (0.5 - cos((time - 1) * pi / 2.2) / 2);
in
transformImage(
translate(titlePos * number)
o scale2(number),
nth(images, 0)
);
glowImage =
let
index = sin(time * pi * 2 / 3.56 - pi / 2) * 4.99 + 5;
in
nth(images, index);
image =
if (time < 1) then
emptyImage
else if (time < 3.2) then
zoomImage
else
transformImage(
translate(titlePos),
glowImage
);
in
image;
titleIn = first(import("titleIn.wav"));
titleLoop =
loop(gain(0.9,
first(import("loop2.wav"))
));
titleSound =
(silence until after(1) => function(x) . titleIn)
mix (silence until after(1.75) => titleLoop);
/*****************************************************************************\
*
* Button swoosh animation
*
\*****************************************************************************/
swooshImage(link, motionImage, xsize, xend, yend, delay) =
let
number = time * 4;
maxSize = (backXSize + xend + xsize) / 2;
midPoint = (-backXSize + xend + xsize) / 2;
stretchIn(number) =
transformImage(
translate(
interpolate(-backXSize, midPoint, number),
yend
)
o scale(number * maxSize / xsize + 0.01, 1),
motionImage
);
shrinkIn(number) =
transformImage(
translate(
interpolate(midPoint, xend, number),
yend
)
o scale(
interpolate(maxSize / xsize, 1, number), 1
),
motionImage
);
static =
hyperlink2(
link,
transformImage(
translate(xend, yend),
motionImage
)
);
image =
if (number < 1) then
stretchIn(number)
else if (number < 2) then
shrinkIn(number - 1)
else
static;
sound = first(import("schwoop.wav"));
in
(emptyImage, silence) until after(delay) => function(x) . (image, sound);
/*****************************************************************************\
*
* The buttons
*
\*****************************************************************************/
tutorialBitmap = import("tbutton.bmp");
pbackXSize(x) = (x / 460 - 0.5) * backXSize * 2;
pbackYSize(y) = (0.5 - y / 256) * backYSize * 2;
(tutorialImage, tutorialSound) =
swooshImage(
"earth.htm",
first(import("tutor1.gif")),
xComponent(second(import("tutor.gif"))),
pbackXSize(274),
pbackYSize( 54),
3.5
);
(introductionImage, introductionSound) =
swooshImage(
"avrml001.htm",
first(import("intro1.gif")),
xComponent(second(import("intro.gif"))),
pbackXSize(138),
pbackYSize(112),
5.0
);
(referenceImage, referenceSound) =
swooshImage(
"avrml002.htm",
first(import("refer1.gif")),
xComponent(second(import("refer.gif"))),
pbackXSize(193),
pbackYSize(173),
6.5
);
(samplesImage, samplesSound) =
swooshImage(
"samples.htm",
first(import("samp1.gif")),
xComponent(second(import("samp1.gif"))),
pbackXSize(308),
pbackYSize(220),
8.0
);
modelSound =
tutorialSound
mix introductionSound
mix referenceSound
mix samplesSound
mix titleSound;
/*****************************************************************************\
*
* composite all the images
*
\*****************************************************************************/
modelImage =
tutorialImage
over introductionImage
over referenceImage
over samplesImage
over titleImage
over starsImage
over backImage;
model = (modelImage, modelSound, modelSound);