Exemplo n.º 1
0
void init (int argc, char **argv)
{
  
  controlPoints.push_back ( vec3(0,0,0) );
  controlPoints.push_back ( vec3(3,0,0) );
  controlPoints.push_back ( vec3(-2,1,-3) );
  controlPoints.push_back ( vec3(2,2,-6) );

  //  create a primitive.  if supplied on command line, read a .obj wavefront file
  ObjFilePrimitive *background, *movingObject;
  if ( argc == 3 ) {
    background = new ObjFilePrimitive ( argv[1] );
    movingObject = new ObjFilePrimitive ( argv[2] );
  } else {
    cout << "usage: " << argv[0] << " backgroundObjFile moverObjfile\n";
    //    exit(1);
    background = new ObjFilePrimitive ( "objfiles/cube.obj" );
    movingObject = new ObjFilePrimitive ( "objfiles/cube.obj" );
  }

  // create the graph
  // the second child of the root must be an instance: it will have its matrix changed
  Instance *scene = new Instance();
  scene->setMatrix ( mat4() );
  scene->addChild ( background );
  Instance *mover = new Instance();
  mover->addChild ( movingObject );
  scene->addChild ( mover );



  // enable camera trackball
  camera.enableTrackball (true);

  // the lights are global for all objects in the scene
  RenderingEnvironment::getInstance().lightPosition = vec4 ( 4,10,5,1 );
  RenderingEnvironment::getInstance().lightColor = vec4 ( 1,1,1,1 );

  // create a material to use
  Material *mat = new Material;
  mat->ambient = vec4 ( 0.1, 0.1, 0.2, 1.0 );
  mat->diffuse = vec4 ( 0.5, 0.5, 0.1, 1.0 );
  mat->specular = vec4 ( 1.0, 1.0, 1.0, 1.0 );
  mat->shininess = 133.0;
  mat->program = mat->loadShaders ( "PhongShading" );

  // attach the material to the primitive
  scene->setMaterial ( mat );

  // set the instance as the scene root
  root = scene;

  // misc OpenGL state
  glClearColor (0.0, 0.0, 0.0, 1.0);
  glEnable(GL_DEPTH_TEST);

}
Exemplo n.º 2
0
void 
init (int argc, char **argv)
{
  
  // create a primitive.  if supplied on command line, read a .obj wavefront file

  if ( argc >= 2 ) {
    prim = new ObjFilePrimitive ( argv[1] );
  } else {
    std::cout << "usage: " << argv[0] << " [objfile.obj]\n";
    exit(1);
  }

  // create a root Instance to contain this primitive
  Instance *instance = new Instance();
  instance->setMatrix ( mat4() );
  instance->addChild ( prim );

  // the lights are global for all objects in the scene
  RenderingEnvironment::getInstance().lightPosition = vec4 ( 0,0,10,1 );
  RenderingEnvironment::getInstance().lightColor = vec4 ( 1,1,1,1 );

  // create a material to use
  Material *mat = new Material;
  mat->ambient = vec4 ( 0.1, 0.1, 0.1, 1.0 );
  mat->diffuse = vec4 ( 0.8, 0.8, 0.8, 1.0 );
  mat->specular = vec4 ( 1.0, 1.0, 1.0, 1.0 );
  mat->shininess = 300.0;
  mat->program = mat->loadShaders ( "DepthMap" );

  // attach the material
  instance->setMaterial ( mat );
  // override the materials read from the objfile
  ObjFilePrimitive *op;
  if ( op = dynamic_cast<ObjFilePrimitive*>(prim) ) {
    for ( int i = 0; i < op->materials_.size(); i++ ) {
      op->materials_[i] = mat;
    }
  }

  // set the instance as the scene root
  root = instance;

  // misc OpenGL state
  glClearColor (0.0, 0.0, 0.0, 1.0);
  glEnable(GL_DEPTH_TEST);
  glPointSize(1.0);
  glLineWidth(1.0);

}
Exemplo n.º 3
0
void display ()
{
  glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  static float lastFrame = getNow();
  float now = getNow();

  root->update(now-lastFrame);

  //  Instance *iroot = dynamic_cast<Instance*>(root);
  //  Instance *mover = dynamic_cast<Instance*> ( iroot->getChild(1) ); 
  Ptr<Instance> mover ( root->getChild(1) );

  // interpolate along a quadratic Bezier curve
  float motionStartTime = 5.0;
  float motionEndTime = motionStartTime+4.0;

  // move the mover

  float u = ((now - motionStartTime) / (motionEndTime - motionStartTime) );
  if ( u < 0.0 )
    mover->setMatrix ( translate(mat4(), controlPoints[0]) );
  else if ( u > 1.0 )
    mover->setMatrix ( translate(mat4(), controlPoints[3]) );
  else 
    mover->setMatrix ( translate(mat4(), deCasteljau3 (controlPoints, u ) ) );

  // add a marker to the scene at each position
  Instance *marker = new Instance();
  marker->addChild ( new Marker() );
  marker->setMatrix ( mover->getMatrix() );
  root->addChild ( marker );

  camera.draw(root);

  glutSwapBuffers();
  lastFrame = now;

  //  std::cout << now << std::endl;
}
Exemplo n.º 4
0
void init (int argc, char **argv)
{
  
  //  create a primitive.  if supplied on command line, read a .obj wavefront file
  ObjFilePrimitive *prim;
  if ( argc == 2 ) {
    prim = new ObjFilePrimitive ( argv[1] );
    //    prim->setMaterial(NULL); // make room for the shadowing shader (add a way to override baked in materials???)
  } else {
    cout << "usage: " << argv[0] << " objfile\n";
    //    exit(1);
    prim = new ObjFilePrimitive ( "objfiles/bone6.obj" );
  }

  // create a root Instance to contain this primitive
  Instance *instance = new Instance();
  instance->setMatrix ( mat4() );
  instance->addChild ( prim );


  // enable camera trackball
  camera.enableTrackball (true);
  camera.setDistance ( 2 );

  // the lights are global for all objects in the scene
  // XXX old deprecated XXX
  //  RenderingEnvironment::getInstance().lightPosition = vec4 ( 4,10,5,1 );
  //  RenderingEnvironment::getInstance().lightColor = vec4 ( 1,1,1,1 );
  


  // create a material to use
  mat = new Material;
  mat->ambient = vec4 ( 0.1, 0.1, 0.1, 1.0 );
  mat->diffuse = vec4 ( 0.9, 0.9, 0.0, 1.0 );
  mat->specular = vec4 ( 1.0, 1.0, 1.0, 1.0 );
  mat->shininess = 133.0;
  mat->program = mat->loadShaders ( "PhongShadingShadows" );

  // attach the material to the instance
  instance->setMaterial ( mat );

  // PointLights do shadows...
  // XXX must call this AFTER compiling the shader!!! certain things in the shadow code glsl won't compile until the shader is built.
  RenderingEnvironment::getInstance().addPointLight ( vec3(4,6,5), vec3(0,0,0) );
  GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
  if (status != GL_FRAMEBUFFER_COMPLETE) {
    printf("FB error, status: 0x%x\n", status);
  }

  // setup to draw the shadow texture
  shadowTexture = RenderingEnvironment::getInstance().getPointLight(0).getShadowTexture();
  //shadowTexture = new Texture("textures/lichen.bmp", false, false, 0 );
  shadowTexture->setupRenderFullscreenQuad("shaders120/DebugShadows.vert","shaders120/DebugShadows.frag");



  // set the instance as the scene root
  root = instance;

  // misc OpenGL state
  glClearColor (0.0, 0.0, 0.0, 1.0);
  glEnable(GL_DEPTH_TEST);
  glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}