Ejemplo n.º 1
0
/**
*    getShadingInfo
*    Obtains the user information necessary to perform shading on the
*    scene.
*    Preconditions:
*        The file to read from.
*        The array to store the information.
*    Postconditions:
*        The array is filled:
*           0-2 - Light position.
*           3-5 - Ambient Light Color
*           6   - Linear attenuation
*           7   - Shininess
*/
void Picture::getShadingInfo( char* fileName, double s_array[] )
{
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //eye vertex
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   s_array[0] = atof(line.c_str());
   line = inputFile->readLine();
   s_array[1] = atof(line.c_str());
   line = inputFile->readLine();
   s_array[2] = atof(line.c_str());
   line = inputFile->readLine();

   line = inputFile->readLine();
   s_array[3] = atof(line.c_str());
   line = inputFile->readLine();
   s_array[4] = atof(line.c_str());
   line = inputFile->readLine();
   s_array[5] = atof(line.c_str());

   line = inputFile->readLine();
   line = inputFile->readLine();
   s_array[6] = atof(line.c_str());

   line = inputFile->readLine();
   line = inputFile->readLine();
   s_array[7] = atof( line.c_str() );

   delete inputFile;
}
Ejemplo n.º 2
0
Matrix* Picture::getPerspectiveTransform(char* fileName, int width, int height)
{
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //fov
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double fov = atof(line.c_str());

   double angle = 3.1415927*fov/180.0;  //get the angle in radians
   double xmax = tan(angle/2);           //the width of the camera is determined by its fov
   double ymax = xmax*(height)/(width);  //the height of the camera is determined by the aspect ratio of the panel upon which the image will be rendered

   //zmax
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double zmax = atof(line.c_str());

   //zmin
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double zmin = atof(line.c_str());

   Matrix* pn = AffineTransforms::perspectiveNorm(xmax, ymax, zmax, zmin);

   delete inputFile;
   return pn;
}
Ejemplo n.º 3
0
InstanceObject* Picture::buildInstanceObject(char* fileName, BasicObject* obj)
{
   InstanceObject* io = new InstanceObject(obj);
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //scale transformation
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double sx = atof(line.c_str());
   line = inputFile->readLine();
   double sy = atof(line.c_str());
   line = inputFile->readLine();
   double sz = atof(line.c_str());
   Matrix* scale = AffineTransforms::scale(sx, sy, sz);

   //rotation transformations
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double rx = atof(line.c_str());
   Matrix* rotX = AffineTransforms::rotateX(rx);   
   line = inputFile->readLine();
   double ry = atof(line.c_str());
   Matrix* rotY = AffineTransforms::rotateY(ry);
   line = inputFile->readLine();
   double rz = atof(line.c_str());
   Matrix* rotZ = AffineTransforms::rotateZ(rz);

   //translation transformation
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double tx = atof(line.c_str());
   line = inputFile->readLine();
   double ty = atof(line.c_str());
   line = inputFile->readLine();
   double tz = atof(line.c_str());
   Matrix* translate = AffineTransforms::translate(tx, ty, tz);

   //standard TRS form
   io->buildTransform(scale);  //deletes the matrix when done
   io->buildTransform(rotX);  
   io->buildTransform(rotY);  
   io->buildTransform(rotZ); 
   io->buildTransform(translate);

   delete inputFile;
   return io;
}
Ejemplo n.º 4
0
/**
*    getZValues
*    Obtain the values for fov and zmax/zmin.
*    Preconditions:
*        The filename to read from.
*        The array to store the information.
*    Postconditions:
*        The array is filled:
*            0 - fov
*            1 - zmax
*            2 - zmin
*/
void Picture::getZValues( char* fileName, double zs[] )
{
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //eye vertex
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   zs[0] = atof(line.c_str());
   line = inputFile->readLine();
   line = inputFile->readLine();
   zs[1] = atof(line.c_str());
   line = inputFile->readLine();
   line = inputFile->readLine();
   zs[2] = atof(line.c_str());
  
   delete inputFile;
}
Ejemplo n.º 5
0
/**
*    buildCamera
*    Obtain user information needed to create the camera.
*    Preconditions:
*        The filename to be read from.
*        The vertex for the eye point.
*    Postconditions:
*        Returns a Matrix pointer that holds the camera's info.
*        Modifies the eye point vertex to the eye point.
*/
Matrix* Picture::buildCamera(char* fileName, Vertex* eye, Vertex* at)
{
    FileIO* inputFile = new FileIO(fileName, 1);  //for reading

    //eye vertex
    string line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double ex = atof(line.c_str());
    line = inputFile->readLine();
    double ey = atof(line.c_str());
    line = inputFile->readLine();
    double ez = atof(line.c_str());
    eye->setX( ex );
    eye->setY( ey );
    eye->setZ( ez );

    //at vertex
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double ax = atof(line.c_str());
    line = inputFile->readLine();
    double ay = atof(line.c_str());
    line = inputFile->readLine();
    double az = atof(line.c_str());
    at->setX( ax );
    at->setY( ay );
    at->setZ( az );

    //up vector
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double ux = atof(line.c_str());
    line = inputFile->readLine();
    double uy = atof(line.c_str());
    line = inputFile->readLine();
    double uz = atof(line.c_str());
    Vector* up = new Vector(ux, uy, uz);

    Matrix* camera = AffineTransforms::buildCamera( eye, at, up );

    delete up;
    delete inputFile;

    return camera;
}
Ejemplo n.º 6
0
Matrix* Picture::getCameraTransform(char* fileName)
{
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //eye point
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double ex = atof(line.c_str());
   line = inputFile->readLine();
   double ey = atof(line.c_str());
   line = inputFile->readLine();
   double ez = atof(line.c_str());

   //at point
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double ax = atof(line.c_str());
   line = inputFile->readLine();
   double ay = atof(line.c_str());
   line = inputFile->readLine();
   double az = atof(line.c_str());

   //up vector
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double ux = atof(line.c_str());
   line = inputFile->readLine();
   double uy = atof(line.c_str());
   line = inputFile->readLine();
   double uz = atof(line.c_str());

   Vertex* eye = new Vertex(ex, ey, ez);
   Vertex* at = new Vertex(ax, ay, az);
   Vector* up = new Vector(ux, uy, uz);

   Matrix* camera = AffineTransforms::cameraTransform(eye, at, up);

   delete eye;
   delete at;
   delete up;
   delete inputFile;

   return camera;
}
Ejemplo n.º 7
0
void Picture::getShaderInfo(Vertex *eye, Color *ambient, Light *light, double *attenuation)
{
	double x, y, z;
	Vertex *lightPOS;
	FileIO* file = new FileIO("camera.txt", 1);
	string line;

	line = file->readLine();
	line = file->readLine();
	eye->setX(atof(line.c_str()));
	line = file->readLine();
	eye->setY(atof(line.c_str()));
	line = file->readLine();
	eye->setZ(atof(line.c_str()));

	delete file;
	file = new FileIO("shade.txt", 1);

	line = file->readLine();
	line = file->readLine();
	x = atof(line.c_str());
	line = file->readLine();
	y = atof(line.c_str());
	line = file->readLine();
	z = atof(line.c_str());
	lightPOS = new Vertex(x, y, z);
	light->setLocation(lightPOS);

	line = file->readLine();
	line = file->readLine();
	ambient->setRed(atof(line.c_str()));
	line = file->readLine();
	ambient->setGreen(atof(line.c_str()));
	line = file->readLine();
	ambient->setBlue(atof(line.c_str()));

	line = file->readLine();
	line = file->readLine();
	*attenuation = atof(line.c_str());

	delete file;
}
Ejemplo n.º 8
0
Vector *Picture::readCamera(double *eX, double *eY, double *eZ, double *aX, double *aY, double *aZ)
{
	Vector *vUp;
	FileIO* inputFile = new FileIO("camera.txt", 1);

	//eye points
	string line = inputFile->readLine();
	line = inputFile->readLine();
	*eX = atof(line.c_str());
	line = inputFile->readLine();
	*eY = atof(line.c_str());
	line = inputFile->readLine();
	*eZ = atof(line.c_str());

	//at points
	line = inputFile->readLine();
	line = inputFile->readLine();
	*aX = atof(line.c_str());
	line = inputFile->readLine();
	*aY = atof(line.c_str());
	line = inputFile->readLine();
	*aZ = atof(line.c_str());

	//vUp
	double x, y, z;
	line = inputFile->readLine();
	line = inputFile->readLine();
	x = atof(line.c_str());
	line = inputFile->readLine();
	y = atof(line.c_str());
	line = inputFile->readLine();
	z = atof(line.c_str());

	vUp = new Vector(x, y, z);
	return vUp;
}
Ejemplo n.º 9
0
void Picture::readFOV(double *zMax, double *zMin, double *fov)
{
	FileIO *inputFile = new FileIO("fov.txt", 1);
	string line = inputFile->readLine();

	line = inputFile->readLine();
	*fov = atof(line.c_str());
	line = inputFile->readLine();

	line = inputFile->readLine();
	*zMax = atof(line.c_str());
	line = inputFile->readLine();

	line = inputFile->readLine();
	*zMin = atof(line.c_str());
}
Ejemplo n.º 10
0
/**
*    Reads a file to build an InstanceObject object.
*    Written by Dr. Boshart
*    Modified by Thomas Shaffer
*/
InstanceObject* Picture::buildInstanceObject(char* fileName, BasicObject* obj)
{
    InstanceObject* io = new InstanceObject(obj);
    FileIO* inputFile = new FileIO(fileName, 1);  //for reading
    char* f1 = (char*)malloc(255*sizeof(char));
    char* f2 = (char*)malloc(255*sizeof(char));

    //scale transformation
    string line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double sx = atof(line.c_str());
    line = inputFile->readLine();
    double sy = atof(line.c_str());
    line = inputFile->readLine();
    double sz = atof(line.c_str());
    Matrix* scale = AffineTransforms::scale(sx, sy, sz);

    //rotation transformations
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double rx = atof(line.c_str());
    Matrix* rotX = AffineTransforms::rotateX(rx);
    line = inputFile->readLine();
    double ry = atof(line.c_str());
    Matrix* rotY = AffineTransforms::rotateY(ry);
    line = inputFile->readLine();
    double rz = atof(line.c_str());
    Matrix* rotZ = AffineTransforms::rotateZ(rz);

    //translation transformation
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double tx = atof(line.c_str());
    line = inputFile->readLine();
    double ty = atof(line.c_str());
    line = inputFile->readLine();
    double tz = atof(line.c_str());
    Matrix* translate = AffineTransforms::translate(tx, ty, tz);

    //standard TRS form
    io->buildTransform(scale);  //deletes the matrix when done
    io->buildTransform(rotX);
    io->buildTransform(rotY);
    io->buildTransform(rotZ);
    io->buildTransform(translate);

    // Material
    line = inputFile->readLine();
    line = inputFile->readLine();
    double red = atof(line.c_str());
    line = inputFile->readLine();
    double green = atof(line.c_str());
    line = inputFile->readLine();
    double blue = atof(line.c_str());
    Color* color = new Color( red, green, blue );
    io->setColor( color );

    // Texture
    string t_string = string("texture");
    line = inputFile->readLine();
    //if ( strcmp( line.c_str(), t_string.c_str() ) ) {
        line = inputFile->readLine();
        const char* file = line.c_str();
        strcpy( f1, file );
        line = inputFile->readLine();
        const char* file2 = line.c_str();
        strcpy( f2, file2 );
        line = inputFile->readLine();
        int width = atoi( line.c_str() );
        line = inputFile->readLine();
        int height = atoi( line.c_str() );
        Texture *tex = new Texture( f1, width, height );
        Texture *norm = new Texture( f2, width, height );
        io->setTexture( tex );
        io->setNormal( norm );
    //}

    delete inputFile;
    return io;
}
Ejemplo n.º 11
0
/**
*    Reads a file to build an InstanceObject object.
*    Written by Dr. Boshart
*    Modified by Thomas Shaffer
*/
InstanceObject* Picture::buildInstanceObject(char* fileName, BasicObject* obj)
{
    InstanceObject* io = new InstanceObject(obj);
    FileIO* inputFile = new FileIO(fileName, 1);  //for reading

    //scale transformation
    string line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double sx = atof(line.c_str());
    line = inputFile->readLine();
    double sy = atof(line.c_str());
    line = inputFile->readLine();
    double sz = atof(line.c_str());
    Matrix* scale = AffineTransforms::scale(sx, sy, sz);

    //rotation transformations
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double rx = atof(line.c_str());
    Matrix* rotX = AffineTransforms::rotateX(rx);
    line = inputFile->readLine();
    double ry = atof(line.c_str());
    Matrix* rotY = AffineTransforms::rotateY(ry);
    line = inputFile->readLine();
    double rz = atof(line.c_str());
    Matrix* rotZ = AffineTransforms::rotateZ(rz);

    //translation transformation
    line = inputFile->readLine();  //skip this line
    line = inputFile->readLine();
    double tx = atof(line.c_str());
    line = inputFile->readLine();
    double ty = atof(line.c_str());
    line = inputFile->readLine();
    double tz = atof(line.c_str());
    Matrix* translate = AffineTransforms::translate(tx, ty, tz);

    //standard TRS form
    io->buildTransform(scale);  //deletes the matrix when done
    io->buildTransform(rotX);
    io->buildTransform(rotY);
    io->buildTransform(rotZ);
    io->buildTransform(translate);

    // Material
    line = inputFile->readLine();
    line = inputFile->readLine();
    double red = atof(line.c_str());
    line = inputFile->readLine();
    double green = atof(line.c_str());
    line = inputFile->readLine();
    double blue = atof(line.c_str());
    io->setColor( red, green, blue );

    // Texture
    line = inputFile->readLine();
    line = inputFile->readLine();
    char* file = (char*)line.c_str();
    line = inputFile->readLine();
    int width = atoi( line.c_str() );
    line = inputFile->readLine();
    int height = atoi( line.c_str() );
    Texture *tex = new Texture( file, width, height );
    io->setTexture( tex );

    delete inputFile;
    return io;
}
Ejemplo n.º 12
0
InstanceObject* Picture::buildInstanceObject(char* fileName, BasicObject* obj)
{
   InstanceObject* io = new InstanceObject(obj);
   FileIO* inputFile = new FileIO(fileName, 1);  //for reading

   //scale transformation
   string line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double sx = atof(line.c_str());
   line = inputFile->readLine();
   double sy = atof(line.c_str());
   line = inputFile->readLine();
   double sz = atof(line.c_str());
   Matrix* scale = AffineTransforms::scale(sx, sy, sz);

   //rotation transformations
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double rx = atof(line.c_str());
   Matrix* rotX = AffineTransforms::rotateX(rx);
   line = inputFile->readLine();
   double ry = atof(line.c_str());
   Matrix* rotY = AffineTransforms::rotateY(ry);
   line = inputFile->readLine();
   double rz = atof(line.c_str());
   Matrix* rotZ = AffineTransforms::rotateZ(rz);

   //translation transformation
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double tx = atof(line.c_str());
   line = inputFile->readLine();
   double ty = atof(line.c_str());
   line = inputFile->readLine();
   double tz = atof(line.c_str());
   Matrix* translate = AffineTransforms::translate(tx, ty, tz);

   //material
   line = inputFile->readLine();  //skip this line
   line = inputFile->readLine();
   double mr = atof(line.c_str());
   line = inputFile->readLine();
   double mg = atof(line.c_str());
   line = inputFile->readLine();
   double mb = atof(line.c_str());
   Color* mat = new Color(mr, mg, mb);
   io->setDiffuseMaterial(mat);

   //standard TRS form
   io->buildTransform(scale);  //deletes the matrix when done
   io->buildTransform(rotX);  
   io->buildTransform(rotY);  
   io->buildTransform(rotZ); 
   io->buildTransform(translate);

   //Get shininess
   FileIO* shaderFile = new FileIO("shade.txt", 1);
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();
   line = shaderFile->readLine();

   io->setShininess(atof(line.c_str()));

   delete shaderFile;
   delete inputFile;
   return io;
}