Пример #1
0
void FPSCamera::move(){
    if (normalKeys['w']){
        fTriple t = fTriple(cameraFront);
        t.vector_scale(cameraSpeed);
        cameraPosition.incr(t);
    }
    if (normalKeys['s']){
        fTriple t = fTriple(cameraFront);
        t.vector_scale(-cameraSpeed);
        cameraPosition.incr(t);
    }
    if (normalKeys['a']){
        fTriple t = fTriple(cameraFront);
        t.vector_cross(cameraTilt);
        t.vector_scale(-cameraSpeed);
        t.vector_normalize();
        cameraPosition.incr(t);
    }
    if (normalKeys['d']){
        fTriple t = fTriple(cameraFront);
        t.vector_cross(cameraTilt);
        t.vector_scale(cameraSpeed);
        t.vector_normalize();
        cameraPosition.incr(t);
    }
}
Пример #2
0
FPSCamera::FPSCamera() {
    std::fill_n(specialKeys, 128, false);
    std::fill_n(normalKeys,  256, false);
    cameraSpeed     = 2.5;
    cameraPosition  = fTriple(3.0f, 0.0f, 3.0f);
    cameraFront     = fTriple(0.0f, 0.0f, -1.0f);
    cameraTilt      = fTriple(0.0f, 1.0f, 0.0f);
}
Пример #3
0
// ============================================== //
// Load a mesh material from a file
t_error ResourceManager::LoadMeshMaterial (const char* filename, Mesh* mesh) {

	// load the mesh material file
	ifstream fileHandle( filename );
	if ( !fileHandle.is_open() ) {
		Log( str( format( "Error opening material file (%1%)" ) % filename ), LOG_ERROR );
		throw BadFileException(filename);
	}

	// parse mtl file
	string buffer;
	while ( fileHandle.good() ) {
		getline( fileHandle, buffer );
		if ( buffer.empty() ) continue;
		
		// setup tokenizer
		CharSeparator tokenSeparator( " \t" );
		CharTokenizer tokens( buffer, tokenSeparator );
		CharTokenizer::iterator token = tokens.begin();
		CharTokenizer::iterator lastToken = tokens.end();

		// Log ( str( format( "buffer: %1%" ) % (buffer) ) );
		// Log ( str( format( "token: %1%" ) % (*token) ) );
		if ( (*token)[0] == '#' ) { continue; } // comment
		else if ( (*token) == "Ka" ) { // ambient colour
			float r = tokenToFloat(++token);
			float g = tokenToFloat(++token);
			float b = tokenToFloat(++token);
			Log( str( format( "Ka: %1%,%2%,%3%" ) % r % g % b ), LOG_DEBUG );
			mesh->color_ambient = fTriple( r, g, b );
		} else if ( (*token) == "Kd" ) { // diffuse colour
			float r = tokenToFloat(++token);
			float g = tokenToFloat(++token);
			float b = tokenToFloat(++token);
			Log( str( format( "Kd: %1%,%2%,%3%" ) % r % g % b ), LOG_DEBUG );
			mesh->color_diffuse = fTriple( r, g, b );
		} else if ( (*token) == "Ks" ) { // specular colour
			float r = tokenToFloat(++token);
			float g = tokenToFloat(++token);
			float b = tokenToFloat(++token);
			Log( str( format( "Ks: %1%,%2%,%3%" ) % r % g % b ), LOG_DEBUG );
			mesh->color_specular = fTriple( r, g, b );
		} else if ( (*token) == "map_Kd" ) { // texture

			// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			// TODO: load texture in resource mgr; use a lookup table to find the gl id and point to that
			string texFilename = *(++token);
			mesh->loadTexture( texFilename.c_str(), MeshRenderData::MESH_RENDER_TEXTURE );
			// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

		} else if ( (*token) == "bump" ) { // bumpmap
			string texFilename = *(++token);
			mesh->loadTexture( texFilename.c_str(), MeshRenderData::MESH_RENDER_TEXBUMP );
		} else {
			Log ( str( format( "Unknown line: %1%" ) % buffer ) );
		}
	
	}

	fileHandle.close();
	return NO_ERROR;
}
Пример #4
0
fTriple FPSCamera::focus(){
    float X = cameraPosition.x + cameraFront.x;
    float Y = cameraPosition.y + cameraFront.y;
    float Z = cameraPosition.z + cameraFront.z;
    return fTriple(X, Y, Z);
}