Esempio n. 1
0
Material* SceneImporter<real>::ReadBlinnPhongMaterial( std::istream& stream, const std::string& name )
{
	BlinnPhongMaterial<real>* material = new BlinnPhongMaterial<real>;

	material->SetSurface( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetAmbient( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetDiffuse( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetSpecular( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetMetallic( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetReflection( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetRefraction( ReadColor( stream ) ); ReadNextExactToken( stream, "," );
	material->SetRefractionIndex( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	material->SetShininess( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	material->SetWireframe( ReadBoolean( stream ) ); ReadNextExactToken( stream, "," );

	material->SetTexture( GetTexture( ReadNextToken( stream ) ) ); ReadNextExactToken( stream, "," );
	Texture<real>* environment = GetTexture( ReadNextToken( stream ) );

	if ( environment && ( environment->GetTextureType() != Texture<real>::TypeCubeMap ) )
		throw "Environment must be a CubeMap";

	material->SetEnvironment( (CubeMap<real>*)environment );
	material->SetName( name );

	return material;
}
Esempio n. 2
0
void SceneImporter<real>::ReadCameraHeader( std::istream& stream, Camera<real>* ioCamera )
{
	ReadCameraNodeHeader( stream, ioCamera );  ReadNextExactToken( stream, "," );

	ioCamera->SetFieldOfView( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	ioCamera->SetNearClipping( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	ioCamera->SetFarClipping( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	ioCamera->SetFocalDistance( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	ioCamera->SetLensRadius( ReadReal( stream ) );
}
Esempio n. 3
0
Matrix3<real> SceneImporter<real>::ReadMatrix3( std::istream& stream )
{
	ReadNextExactToken( stream, "Matrix3" );
	ReadNextExactToken( stream, "(" );

	if ( TryReadClosingParenthesis( stream ) )
	{
		Matrix3<real> result;
		result.SetIdentity();
		return result;
	}

	real m00 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m01 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m02 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m10 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m11 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m12 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m20 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m21 = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real m22 = ReadReal( stream );
	Matrix3<real> result = Matrix3<real>( m00, m01, m02, m10, m11, m12, m20, m21, m22 );
	ReadNextExactToken( stream, ")" );

	return result;
}
Esempio n. 4
0
Node<real>* SceneImporter<real>::ReadPlane( std::istream& stream, const std::string& name )
{
	Plane<real>* plane = new Plane<real>;
	plane->SetName( name );

	ReadGeometryHeader( stream, plane ); ReadNextExactToken( stream, "," );

	real sizeZ = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real sizeX = ReadReal( stream );
	plane->SetSizes( sizeZ, sizeX );

	return plane;
}
Esempio n. 5
0
Node<real>* SceneImporter<real>::ReadCylinder( std::istream& stream, const std::string& name )
{
	Cylinder<real>* cylinder = new Cylinder<real>;
	cylinder->SetName( name );

	ReadGeometryHeader( stream, cylinder ); ReadNextExactToken( stream, "," );

	real height = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real radius = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real radiusSubdivisions = ReadUnsignedInt( stream );
	cylinder->SetSizes( height, radius, radiusSubdivisions );

	return cylinder;
}
Esempio n. 6
0
Node<real>* SceneImporter<real>::ReadBox( std::istream& stream, const std::string& name )
{
	Box<real>* box = new Box<real>;
	box->SetName( name );

	ReadGeometryHeader( stream, box ); ReadNextExactToken( stream, "," );

	real sizeX = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real sizeY = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real sizeZ = ReadReal( stream );
	box->SetSizes( sizeX, sizeY, sizeZ );

	return box;
}
Esempio n. 7
0
Vector2<real> SceneImporter<real>::ReadVector2( std::istream& stream )
{
	ReadNextExactToken( stream, "Vector2" );
	ReadNextExactToken( stream, "(" );

	if ( TryReadClosingParenthesis( stream ) )
		return Vector2<real>( 0, 0 );

	real X = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real Y = ReadReal( stream );
	Vector2<real> result = Vector2<real>( X, Y );
	ReadNextExactToken( stream, ")" );

	return result;
}
Esempio n. 8
0
Camera<real>* SceneImporter<real>::ReadTurntableCamera( std::istream& stream, const std::string& name )
{
	TurntableCamera<real>* camera = new TurntableCamera<real>();

	camera->SetName( name );
	ReadCameraHeader( stream, camera ); ReadNextExactToken( stream, "," );
	camera->SetCenter( ReadVector3( stream ) ); ReadNextExactToken( stream, "," );
	camera->SetRotationThetaAxis( ReadVector3( stream ) ); ReadNextExactToken( stream, "," );
	camera->SetRotationPhiAxis( ReadVector3( stream ) ); ReadNextExactToken( stream, "," );
	camera->SetRotationPhi( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	camera->SetRotationTheta( ReadReal( stream ) ); ReadNextExactToken( stream, "," );
	camera->SetDistance( ReadReal( stream ) );

	return camera;
}
Esempio n. 9
0
Color<real> SceneImporter<real>::ReadColor( std::istream& stream )
{
	ReadNextExactToken( stream, "Color" );
	ReadNextExactToken( stream, "(" );

	if ( TryReadClosingParenthesis( stream ) )
		return Color<real>( 0, 0, 0, 1 );

	real R = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real G = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real B = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real A = ReadReal( stream );
	Color<real> result = Color<real>( R, G, B, A );
	ReadNextExactToken( stream, ")" );

	return result;
}
Esempio n. 10
0
Light<real>* SceneImporter<real>::ReadSpotLight( std::istream& stream, const std::string& name )
{
	SpotLight<real>* light = new SpotLight<real>;
	light->SetName( name );

	ReadLightHeader( stream, light ); ReadNextExactToken( stream, "," );

	light->SetDirection( ReadVector3( stream ) );  ReadNextExactToken( stream, "," );
	light->SetAperture( ReadReal( stream ) );

	return light;
}
Esempio n. 11
0
Node<real>* SceneImporter<real>::ReadSphere( std::istream& stream, const std::string& name )
{
	Sphere<real>* sphere = new Sphere<real>;
	sphere->SetName( name );

	ReadGeometryHeader( stream, sphere ); ReadNextExactToken( stream, "," );

	real radius = ReadReal( stream ); ReadNextExactToken( stream, "," );
	real latitudeSubdivisions = ReadUnsignedInt( stream ); ReadNextExactToken( stream, "," );
	real longitudeSubdivisions = ReadUnsignedInt( stream );
	sphere->SetSizes( radius, latitudeSubdivisions, longitudeSubdivisions );

	return sphere;
}
Esempio n. 12
0
/* Reads next symbol */
static
void InSymbol(LPIT8 it8)
{
        register char *idptr;
        register int k;
        SYMBOL key;
        int sng;

        do {

        while (isseparator(it8->ch))
                                NextCh(it8);

        if (isfirstidchar(it8->ch)) {          /* Identifier */


                k = 0;
                idptr = it8->id;

                do {

                if (++k < MAXID) *idptr++ = (char) it8->ch;

                NextCh(it8);

                } while (isidchar(it8->ch));

                *idptr = '\0';
                xstrupr(it8->id);

                key = BinSrchKey(it8->id);
                if (key == SNONE) it8->sy = SIDENT;
                else it8->sy = key;

        }
        else                         /* Is a number? */
        if (isdigit(it8->ch) || it8->ch == '.' || it8->ch == '-' || it8->ch == '+')
        {
        int sign = 1;

        if (it8->ch == '-') {
                sign = -1;
                NextCh(it8);
                }

        it8->inum = 0;
        it8->sy   = SINUM;

        while (isdigit(it8->ch))
        {
                if ((long) it8->inum * 10L > (long) INT_MAX)
                {
                ReadReal(it8, it8->inum);
                it8->sy = SDNUM;
                it8->dnum *= sign;
                return;
                }

        it8->inum = it8->inum * 10 + (it8->ch - '0');
        NextCh(it8);
        }

        if (it8->ch == '.') {

                ReadReal(it8, it8->inum);
                it8->sy = SDNUM;
                it8->dnum *= sign;
                return;
                }

        it8 -> inum *= sign;
        return;

        }
        else
        switch ((int) it8->ch) {

        case '\0':
        case '\x1a':
                    it8->sy = SEOF;
                    break;



        case '\n':
                  NextCh(it8);
                  it8->sy = SEOLN;
                  it8->lineno++;
                  break;

        /* Comment */

        case '#':
                 NextCh(it8);
                 while (it8->ch && it8->ch != '\n')
             NextCh(it8);

                 it8->sy = SCOMMENT;
                 break;

        /* String. I will support \", \n, \t and \\. */
    /* But otherwise I hardly doubt these will be used ... */

        case '\'':
        case '\"':
                  idptr = it8->str;
                  sng = it8->ch;
                  k = 0;
                  NextCh(it8);

                  while (k < MAXSTR && it8->ch != sng) {

                  if (it8->ch == '\n'|| it8->ch == '\r') k = MAXSTR+1;
                  else {

                        if (it8->ch == '\\')
                        {
                                NextCh(it8);

                                switch (it8->ch) {

                                case 'n': *idptr++ = '\n'; break;
                                case 'r': *idptr++ = '\r'; break;
                                case 't': *idptr++ = '\t'; break;
                                case '\\': *idptr++ = '\\'; break;

                                default:
                                        *idptr++ = (char) it8->ch;
                                }

                                NextCh(it8);
                        }
                        else
            {
                        *idptr++ = (char) it8->ch;
                        NextCh(it8);
                        }

                  k++;
          }
                  }

                  it8->sy = SSTRING;
                  *idptr = '\0';
                  NextCh(it8);
                  break;


        default:
                it8->sy = SSYNERROR;
                NextCh(it8);

       }

    } while (it8->sy == SCOMMENT);
}