home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
VRML Tools for 3D Cyberspace
/
VRML_Tools_For_3D_Cyberspace.iso
/
amber
/
demos
/
children
/
demo.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-01
|
3KB
|
147 lines
#define DEMO_OBJS
#include "amber.hpp"
#include "demo.hpp"
#define X 0
#define Y 1
#define Z 2
void init(channelClass *ch)
{
F4 color = {1.0,0.0,0.0,1.0};
V3 pos, trackPoint;
// Create center red box;
sp[0] = new spinClass(Y, 0.017, 1.0, 1.0, 1.0);
sp[0]->setAllColor(color);
V3_set(pos, 0.0, 0.0, 0.0);
sp[0]->setPosition(pos);
//sp[0]->rotate(Z, 0.34);
// Create child of red cube
V3_init(pos);
sp[1] = new spinClass(X,-0.017, 0.5, 0.5, 0.5);
color[0] = 0.0;
color[1] = 1.0;
sp[1]->setAllColor(color);
pos[X] = 2.0;
sp[1]->setPosition(pos);
// Create child of child
sp[5] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
sp[5]->setAllColor(color);
pos[Y] = 0.5;
sp[5]->setPosition(pos);
// Create child of red cube
V3_init(pos);
sp[2] = new spinClass(X, 0.017, 0.5, 0.5, 0.5);
color[1] = 0.0;
color[2] = 1.0;
sp[2]->setAllColor(color);
pos[X] = -2.0;
sp[2]->setPosition(pos);
// Create child of child
sp[6] = new spinClass(Z, -0.017, 0.25, 0.25, 0.25);
sp[6]->setAllColor(color);
pos[Y] = 0.5;
sp[6]->setPosition(pos);
// Create child of red cube
V3_init(pos);
sp[3] = new spinClass(Z, -0.017, 0.5, 0.5, 0.5);
color[0] = 1.0;
sp[3]->setAllColor(color);
pos[Z] = 2.0;
sp[3]->setPosition(pos);
// Create child of child
sp[7] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
sp[7]->setAllColor(color);
pos[Y] = 0.5;
sp[7]->setPosition(pos);
// Create child of red cube
V3_init(pos);
sp[4] = new spinClass(Z, 0.017, 0.5, 0.5, 0.5);
color[0] = 0.0;
color[1] = 1.0;
sp[4]->setAllColor(color);
pos[Z] = -2.0;
sp[4]->setPosition(pos);
// Create child of child
sp[8] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
sp[8]->setAllColor(color);
pos[Y] = 0.5;
sp[8]->setPosition(pos);
// Create point tracking object
tb = new cubeClass(0.05,0.05,0.05);
F4_set(color, 1.0,1.0,1.0,1.0);
tb->setAllColor(color);
V3_set(pos, -0.125,-0.1255,-0.125);
pt = new pTrackClass(sp[8], pos, tb);
sp[1]->addChild(sp[5]);
sp[2]->addChild(sp[6]);
sp[3]->addChild(sp[7]);
sp[4]->addChild(sp[8]);
// Add four medium children to parent.
sp[0]->addChild(sp[1]);
sp[0]->addChild(sp[2]);
sp[0]->addChild(sp[3]);
sp[0]->addChild(sp[4]);
V3_set(pos,0.0,0.0,10.0);
ch->setPosition(pos);
}
void cleanup()
{
delete sp[0];
delete sp[1];
delete sp[2];
delete sp[3];
delete sp[4];
delete sp[5];
delete sp[6];
delete sp[7];
delete sp[8];
delete pt;
delete tb;
}
extern void processChar(unsigned int nChar)
{
switch (nChar) {
case 'A':
if (attached) break;
attached=1;
sp[0]->addChild(sp[1]);
sp[0]->addChild(sp[2]);
sp[0]->addChild(sp[3]);
sp[0]->addChild(sp[4]);
sp[1]->addChild(sp[5]);
sp[2]->addChild(sp[6]);
sp[3]->addChild(sp[7]);
sp[4]->addChild(sp[8]);
break;
case 'B':
if (!attached) break;
attached=0;
sp[0]->removeChild(sp[1]);
sp[0]->removeChild(sp[2]);
sp[0]->removeChild(sp[3]);
sp[0]->removeChild(sp[4]);
sp[1]->removeChild(sp[5]);
sp[2]->removeChild(sp[6]);
sp[3]->removeChild(sp[7]);
sp[4]->removeChild(sp[8]);
break;
}
}