예제 #1
0
int main (int argc, char **argv)
{
  //Initialize GLUT
  initGlut( argc, argv );
  
  Kernel kernel;
  kernel.enableVerticalSync( false );
  printf( "Kernel loaded\n" );
  
  //Setup camera
  cam3D.setCenter( center );
  cam3D.translate( 0,0,200 );
  cam3D.orbitV( Util::DegToRad( -20 ), true );
  cam3D.orbitH( Util::DegToRad( +45 ), true );
  cam3D.setNearClipPlane( 10.0f );
  cam3D.setFarClipPlane( 1000.0f );
  
  //VertColorMaterial mat;
  //StandardMaterial mat;
  PhongMaterial mat;
  mat.setSpecularity( 0.5 );
  
  //StandardMaterial mat;
  //mat.setCullBack( false );
  //mat.setUseLighting( false );
  /*
  polyActor = new SPolyActor;
  polyActor->setMaterial( &mat );
  polyActor->setMesh( polyMesh );
  
  triActor = new TriMeshActor;
  triActor->setMaterial( &mat );
  triActor->setMesh( triMesh );
  */
  
  lblFps.setLocation( Vector2( 0.0f, (Float)resY ));
  lblFps.setColor( Vector3( 1.0f, 1.0f, 1.0f ));
  
  //Find model center
  findCenter();
  cam3D.setCenter( center );

  //Run application
  atexit( cleanup );
  glutMainLoop();
  cleanup();

  return EXIT_SUCCESS;
}
예제 #2
0
void drag3D(int x, int y)
{
  if (down3D) {

    //printf ("Eye1:"); printVector (cam3D.getEye());
    //printf ("Look:"); printVector (cam3D.getLook());
    //printf ("Side:"); printVector (cam3D.getSide());
    //printf ("\n");
    
    //printf ("------------------------\n");
    //printMatrix (cam3D.getMatrix());
    
    Vector2 diff = Vector2((Float)x,(Float)y) - lastMouse3D;
    float eyeDist = (cam3D.getEye() - center).norm();
    
    Float angleH = diff.x * (2*PI) / 400;
    Float angleV = diff.y * (2*PI) / 400;
    Float panH = -diff.x * ( eyeDist * 0.002f );
    Float panV =  diff.y * ( eyeDist * 0.002f );
    Float zoom = -diff.y * ( eyeDist * 0.01f );
    lastMouse3D.set( (Float)x, (Float)y );
    
    switch (cameraMode)
    {  
    case CAMERA_MODE_ZOOM:

      cam3D.zoom (zoom);
      break;
      
    case CAMERA_MODE_ORBIT:
      
      cam3D.setCenter (center);
      cam3D.orbitH (angleH, true);
      cam3D.orbitV (angleV, true);
      break;

    case CAMERA_MODE_PAN:

      cam3D.panH (panH);
      cam3D.panV (panV);
      break;
    }
    
    postRedisplay ();
  }
}
예제 #3
0
int main (int argc, char **argv)
{
  //Initialize GLUT
  initGlut( argc, argv );
  
  Kernel kernel;
  kernel.enableVerticalSync( false );
  renderer = kernel.getRenderer();
  printf( "Kernel loaded\n" );

  StandardMaterial matRedLogo;
  matRedLogo.setSpecularity( 0.5 );
  matRedLogo.setDiffuseColor( Vector3(1,0,0) );
  matRedLogo.setAmbientColor( matRedLogo.getDiffuseColor() * .8f );

  StandardMaterial matWhiteLogo;
  matWhiteLogo.setSpecularity( 0.5 );
  matWhiteLogo.setAmbientColor( matWhiteLogo.getDiffuseColor() * .8f );

  StandardMaterial matWhite;
  matWhite.setSpecularity( 0.5 );

  StandardMaterial matBlue;
  matBlue.setSpecularity( 0.5 );
  matBlue.setDiffuseColor( Vector3(0,0.5,1) );

  StandardMaterial matGreen;
  matGreen.setSpecularity( 0.5 );
  matGreen.setDiffuseColor( Vector3(0,0.6,0) );

  StandardMaterial matYellow;
  matYellow.setSpecularity( 0.5 );
  matYellow.setDiffuseColor( Vector3(1,1,0.7) );

  StandardMaterial matBlack;
  matBlack.setSpecularity( 0.5 );
  matBlack.setDiffuseColor( Vector3(0.2,0.2,0.2) );

  MultiMaterial mm;
  mm.setNumSubMaterials( 5 );
  mm.setSubMaterial( 0, &matBlue );
  mm.setSubMaterial( 1, &matYellow );
  mm.setSubMaterial( 2, &matWhite );
  mm.setSubMaterial( 3, &matBlack );
  mm.setSubMaterial( 4, &matBlue );

  MultiMaterial mm2;
  mm2.setNumSubMaterials( 5 );
  mm2.setSubMaterial( 0, &matGreen );
  mm2.setSubMaterial( 1, &matYellow );
  mm2.setSubMaterial( 2, &matWhite );
  mm2.setSubMaterial( 3, &matBlack );
  mm2.setSubMaterial( 4, &matGreen );

  MultiMaterial mmLogo;
  mmLogo.setNumSubMaterials( 2 );
  mmLogo.setSubMaterial( 0, &matWhiteLogo );
  mmLogo.setSubMaterial( 1, &matRedLogo );

  //Setup Logo scene

  sceneLogo = new Scene;

  loadLogo( "logo.pak" );
  actLogo = new TriMeshActor;
  actLogo->setMesh( mshLogo );
  actLogo->translate( 200, 0, 0 );
  actLogo->setMaterial( &mmLogo );
  sceneLogo->addChild( actLogo );

  camLogo = new Camera3D;
  camLogo->translate( 0,0,-600 );
  camLogo->setNearClipPlane( 1.0f );
  camLogo->setFarClipPlane( 3000.0f );

  lightLogo = new SpotLight( Vector3(0,0,-500), Vector3(0,0,1), 60, 50 );
  lightLogo->setCastShadows( true );
  sceneLogo->addChild( lightLogo );

  //Setup Bub scene

  loadPackage( "bub.pak" );
  scene = new Scene;
  
  skinActor = new SkinMeshActor;
  skinActor->setMaterial( &mm );
  skinActor->setMesh( character );
  skinActor->translate( 60, 0, 0 );
  scene->addChild( skinActor );

  skinActor2 = new SkinMeshActor;
  skinActor2->setMaterial( &mm2 );
  skinActor2->setMesh( character );
  skinActor2->translate( -60, 0, 0 );
  scene->addChild( skinActor2 );

  TriMesh *cubeMesh = new CubeMesh;
  TriMeshActor *cube = new TriMeshActor;
  cube->setMaterial( &matWhiteLogo );
  cube->setMesh( cubeMesh );
  cube->scale( 300, 10, 300 );
  cube->translate( 0, -70, 0 );
  scene->addChild( cube );

  StandardMaterial axesMat;
  axesMat.setUseLighting( false );
  AxisActor *axes = new AxisActor;
  axes->scale( 100 );
  axes->setMaterial( &axesMat );
  //scene->addChild( axes );

  cam3D.setCenter( center );
  cam3D.translate( 0,0,-400 );
  cam3D.orbitV( Util::DegToRad( 20 ), true );
  cam3D.orbitH( Util::DegToRad( 30 ), true );
  cam3D.setNearClipPlane( 1.0f );
  cam3D.setFarClipPlane( 3000.0f );

  light = new SpotLight( Vector3(-200,200,-200), Vector3(1,-1,1), 60, 59 );
  light->setCastShadows( true );
  //light->setDiffuseColor( Vector3( 1,.2,.2 ) );
  scene->addChild( light );

  Light* l = new SpotLight( Vector3(200,200,-200), Vector3(-1,-1,1), 60, 0 );
  l->setCastShadows( true );
  //l->setDiffuseColor( Vector3( .2,.2,1 ) );
  scene->addChild( l );

  //Start with Logo scene
  sceneRender = sceneLogo;
  lightRender = lightLogo;
  camRender = camLogo;

  //sceneRender = scene;
  //lightRender = light;
  //camRender = &cam3D;

  ///////////////////////////////////////
  //Test triangulation
  PolyMesh p;
  int numVerts = 6;
  ArrayList< PolyMesh::Vertex* > verts;
  for (int v=0; v<numVerts; ++v)
    verts.pushBack( p.addVertex() );
  p.addFace( verts.buffer(), numVerts );

  verts[0]->point.set( 0,0,0 );
  verts[1]->point.set( 1,0,0 );
  verts[2]->point.set( 1,1,0 );
  verts[3]->point.set( 2,1,0 );
  verts[4]->point.set( 2,2,0 );
  verts[5]->point.set( 0,2,0 );
  p.triangulate();

  PolyMeshActor *pa = new PolyMeshActor;
  pa->setMesh( &p );
  pa->scale( 100, 100, 100 );
  //scene->addChild( pa );

  /////////////////////////////////
  
  lblFps.setLocation( Vector2( 0.0f, (Float)resY ));
  lblFps.setColor( Vector3( 1.0f, 1.0f, 1.0f ));
  
  //Find model center
  findCenter();
  cam3D.setCenter( center );

  //Run application
  atexit( cleanup );
  glutMainLoop();
  cleanup();

  return EXIT_SUCCESS;
}