void show_ships(Map *m) { int i; printf("Size:\t\t\t 1 2 3 4 5\n"); printf("0) Aircraft carier (%i)\t", m->ships[0]); for(i=0;i<AIRCRAFT_CARRIER_SIZE; i++) PRINT_GREEN(" O"); printf("\n1) Battleship (%i)\t", m->ships[1]); for(i=0;i<BATTLESHIP_SIZE; i++) PRINT_GREEN(" O"); for(i=0;i<AIRCRAFT_CARRIER_SIZE-BATTLESHIP_SIZE; i++) PRINT_BLUE(" ~"); printf("\n2) Submarine (%i)\t", m->ships[2]); for(i=0;i<SUBMARINE_SIZE; i++) PRINT_GREEN(" O"); for(i=0;i<AIRCRAFT_CARRIER_SIZE-SUBMARINE_SIZE; i++) PRINT_BLUE(" ~"); printf("\n3) Patrol boat (%i)\t", m->ships[3]); for(i=0;i<PATROL_BOAT_SIZE; i++) PRINT_GREEN(" O"); for(i=0;i<AIRCRAFT_CARRIER_SIZE-PATROL_BOAT_SIZE; i++) PRINT_BLUE(" ~"); printf("\n\n"); }
void show_map(Map *m) { int i, j; // Print first line printf(" y\\x "); for (i=0; i<m->height; i++) if (i<10) printf("%i ", i); else printf("%i ", i); printf("\n"); // Print letters line for (i=0; i<m->width; i++) { // Print letter if (i<10) printf(" %i", i); else printf(" %i", i); for (j=0; j<m->height; j++) { switch(m->map[i][j]) { case WATER: PRINT_BLUE(" ~"); break; case MISS: PRINT_RED(" ~"); break; case SHIP: PRINT_GREEN(" O"); break; case HIT: PRINT_RED(" X"); break; default: printf(" ?"); break; } // printf(" %i", m->map[i][j]); } printf("\n"); } printf("\n"); }
int main(int argc, char *argv[]) { LONG rv; SCARDCONTEXT hContext; DWORD dwReaders; LPSTR mszReaders = NULL; char *ptr, **readers = NULL; int nbReaders; SCARDHANDLE hCard; DWORD dwActiveProtocol, dwReaderLen, dwState, dwProt, dwAtrLen; BYTE pbAtr[MAX_ATR_SIZE] = ""; char pbReader[MAX_READERNAME] = ""; int reader_nb; unsigned int i; unsigned char bSendBuffer[MAX_BUFFER_SIZE]; unsigned char bRecvBuffer[MAX_BUFFER_SIZE]; DWORD send_length, length; DWORD verify_ioctl = 0; DWORD modify_ioctl = 0; DWORD pin_properties_ioctl = 0; DWORD mct_readerdirect_ioctl = 0; DWORD properties_in_tlv_ioctl = 0; DWORD ccid_esc_command = 0; SCARD_IO_REQUEST pioRecvPci; SCARD_IO_REQUEST pioSendPci; PCSC_TLV_STRUCTURE *pcsc_tlv; #if defined(VERIFY_PIN) | defined(MODIFY_PIN) int offset; #endif #ifdef VERIFY_PIN PIN_VERIFY_STRUCTURE *pin_verify; #endif #ifdef MODIFY_PIN PIN_MODIFY_STRUCTURE *pin_modify; #endif printf("SCardControl sample code\n"); printf("V 1.4 © 2004-2010, Ludovic Rousseau <*****@*****.**>\n\n"); printf(MAGENTA "THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL!\n"); printf("Do NOT use it unless you really know what you do.\n\n" NORMAL); rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext); if (rv != SCARD_S_SUCCESS) { printf("SCardEstablishContext: Cannot Connect to Resource Manager %ulX\n", rv); return 1; } /* Retrieve the available readers list */ rv = SCardListReaders(hContext, NULL, NULL, &dwReaders); PCSC_ERROR_EXIT(rv, "SCardListReaders") mszReaders = malloc(sizeof(char)*dwReaders); if (mszReaders == NULL) { printf("malloc: not enough memory\n"); goto end; } rv = SCardListReaders(hContext, NULL, mszReaders, &dwReaders); if (rv != SCARD_S_SUCCESS) printf("SCardListReader: %ulX\n", rv); /* Extract readers from the null separated string and get the total * number of readers */ nbReaders = 0; ptr = mszReaders; while (*ptr != '\0') { ptr += strlen(ptr)+1; nbReaders++; } if (nbReaders == 0) { printf("No reader found\n"); goto end; } /* allocate the readers table */ readers = calloc(nbReaders, sizeof(char *)); if (NULL == readers) { printf("Not enough memory for readers[]\n"); goto end; } /* fill the readers table */ nbReaders = 0; ptr = mszReaders; printf("Available readers (use command line argument to select)\n"); while (*ptr != '\0') { printf("%d: %s\n", nbReaders, ptr); readers[nbReaders] = ptr; ptr += strlen(ptr)+1; nbReaders++; } printf("\n"); if (argc > 1) { reader_nb = atoi(argv[1]); if (reader_nb < 0 || reader_nb >= nbReaders) { printf("Wrong reader index: %d\n", reader_nb); goto end; } } else reader_nb = 0; /* connect to a reader (even without a card) */ dwActiveProtocol = -1; printf("Using reader: " GREEN "%s\n" NORMAL, readers[reader_nb]); rv = SCardConnect(hContext, readers[reader_nb], SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol); printf(" Protocol: " GREEN "%uld\n" NORMAL, dwActiveProtocol); PCSC_ERROR_EXIT(rv, "SCardConnect") #ifdef GET_GEMPC_FIRMWARE /* get GemPC firmware */ printf(" Get GemPC Firmware\n"); /* this is specific to Gemalto readers */ bSendBuffer[0] = 0x02; rv = SCardControl(hCard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, bSendBuffer, 1, bRecvBuffer, sizeof(bRecvBuffer), &length); printf(" Firmware: " GREEN); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf(NORMAL "\n"); bRecvBuffer[length] = '\0'; printf(" Firmware: " GREEN "%s" NORMAL" (length " GREEN "%ld" NORMAL " bytes)\n", bRecvBuffer, length); PCSC_ERROR_CONT(rv, "SCardControl") #endif /* does the reader support PIN verification? */ rv = SCardControl(hCard, CM_IOCTL_GET_FEATURE_REQUEST, NULL, 0, bRecvBuffer, sizeof(bRecvBuffer), &length); PCSC_ERROR_EXIT(rv, "SCardControl") printf(" TLV (%uld): " GREEN, length); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf(NORMAL "\n"); PCSC_ERROR_CONT(rv, "SCardControl(CM_IOCTL_GET_FEATURE_REQUEST)") if (length % sizeof(PCSC_TLV_STRUCTURE)) { printf("Inconsistent result! Bad TLV values!\n"); goto end; } /* get the number of elements instead of the complete size */ length /= sizeof(PCSC_TLV_STRUCTURE); pcsc_tlv = (PCSC_TLV_STRUCTURE *)bRecvBuffer; for (i = 0; i < length; i++) { switch (pcsc_tlv[i].tag) { case FEATURE_VERIFY_PIN_DIRECT: PRINT_GREEN("Reader supports", "FEATURE_VERIFY_PIN_DIRECT"); verify_ioctl = ntohl(pcsc_tlv[i].value); break; case FEATURE_MODIFY_PIN_DIRECT: PRINT_GREEN("Reader supports", "FEATURE_MODIFY_PIN_DIRECT"); modify_ioctl = ntohl(pcsc_tlv[i].value); break; case FEATURE_IFD_PIN_PROPERTIES: PRINT_GREEN("Reader supports", "FEATURE_IFD_PIN_PROPERTIES"); pin_properties_ioctl = ntohl(pcsc_tlv[i].value); break; case FEATURE_MCT_READER_DIRECT: PRINT_GREEN("Reader supports", "FEATURE_MCT_READER_DIRECT"); mct_readerdirect_ioctl = ntohl(pcsc_tlv[i].value); break; case FEATURE_GET_TLV_PROPERTIES: PRINT_GREEN("Reader supports", "FEATURE_GET_TLV_PROPERTIES"); properties_in_tlv_ioctl = ntohl(pcsc_tlv[i].value); break; case FEATURE_CCID_ESC_COMMAND: PRINT_GREEN("Reader supports", "FEATURE_CCID_ESC_COMMAND"); ccid_esc_command = ntohl(pcsc_tlv[i].value); break; default: PRINT_RED_DEC("Can't parse tag", pcsc_tlv[i].tag); } } printf("\n"); if (properties_in_tlv_ioctl) { int value; int ret; rv = SCardControl(hCard, properties_in_tlv_ioctl, NULL, 0, bRecvBuffer, sizeof(bRecvBuffer), &length); PCSC_ERROR_CONT(rv, "SCardControl(GET_TLV_PROPERTIES)") printf("GET_TLV_PROPERTIES (" GREEN "%uld" NORMAL "): " GREEN, length); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf(NORMAL "\n"); printf("\nDisplay all the properties:\n"); parse_properties(bRecvBuffer, length); printf("\nFind a specific property:\n"); ret = PCSCv2Part10_find_TLV_property_by_tag_from_buffer(bRecvBuffer, length, PCSCv2_PART10_PROPERTY_wIdVendor, &value); if (ret) PRINT_RED_DEC(" wIdVendor", ret); else PRINT_GREEN_HEX4(" wIdVendor", value); ret = PCSCv2Part10_find_TLV_property_by_tag_from_hcard(hCard, PCSCv2_PART10_PROPERTY_wIdProduct, &value); if (ret) PRINT_RED_DEC(" wIdProduct", ret); else PRINT_GREEN_HEX4(" wIdProduct", value); printf("\n"); } if (mct_readerdirect_ioctl) { char secoder_info[] = { 0x20, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; rv = SCardControl(hCard, mct_readerdirect_ioctl, secoder_info, sizeof(secoder_info), bRecvBuffer, sizeof(bRecvBuffer), &length); PCSC_ERROR_CONT(rv, "SCardControl(MCT_READER_DIRECT)") printf("MCT_READER_DIRECT (%uld): ", length); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf("\n"); } if (pin_properties_ioctl) { PIN_PROPERTIES_STRUCTURE *pin_properties; rv = SCardControl(hCard, pin_properties_ioctl, NULL, 0, bRecvBuffer, sizeof(bRecvBuffer), &length); PCSC_ERROR_CONT(rv, "SCardControl(pin_properties_ioctl)") printf("PIN PROPERTIES (" GREEN "%uld" NORMAL "): " GREEN, length); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf(NORMAL "\n"); pin_properties = (PIN_PROPERTIES_STRUCTURE *)bRecvBuffer; PRINT_GREEN_HEX4(" wLcdLayout", pin_properties -> wLcdLayout); PRINT_GREEN_DEC(" bEntryValidationCondition", pin_properties -> bEntryValidationCondition); PRINT_GREEN_DEC(" bTimeOut2", pin_properties -> bTimeOut2); printf("\n"); } #ifdef GET_GEMPC_FIRMWARE if (ccid_esc_command) { /* get GemPC firmware */ printf("Get GemPC Firmware\n"); /* this is specific to Gemalto readers */ bSendBuffer[0] = 0x02; rv = SCardControl(hCard, ccid_esc_command, bSendBuffer, 1, bRecvBuffer, sizeof(bRecvBuffer), &length); printf(" Firmware: " GREEN); for (i=0; i<length; i++) printf("%02X ", bRecvBuffer[i]); printf(NORMAL "\n"); bRecvBuffer[length] = '\0'; printf(" Firmware: " GREEN "%s" NORMAL" (length " GREEN "%ld" NORMAL " bytes)\n", bRecvBuffer, length); PCSC_ERROR_CONT(rv, "SCardControl") } #endif if (0 == verify_ioctl) { printf("Reader %s does not support PIN verification\n", readers[reader_nb]); goto end; } /* get card status */ dwAtrLen = sizeof(pbAtr); dwReaderLen = sizeof(pbReader); rv = SCardStatus(hCard, pbReader, &dwReaderLen, &dwState, &dwProt, pbAtr, &dwAtrLen); printf(" Reader: %s (length %uld bytes)\n", pbReader, dwReaderLen); printf(" State: 0x%04ulX\n", dwState); printf(" Prot: %uld\n", dwProt); printf(" ATR (length %uld bytes):", dwAtrLen); for (i=0; i<dwAtrLen; i++) printf(" %02X", pbAtr[i]); printf("\n"); PCSC_ERROR_CONT(rv, "SCardStatus") if (dwState & SCARD_ABSENT) { printf("No card inserted\n"); goto end; } /* connect to a reader (even without a card) */ dwActiveProtocol = -1; rv = SCardReconnect(hCard, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1, SCARD_LEAVE_CARD, &dwActiveProtocol); printf(" Protocol: %uld\n", dwActiveProtocol); PCSC_ERROR_EXIT(rv, "SCardReconnect") switch(dwActiveProtocol) { case SCARD_PROTOCOL_T0: pioSendPci = *SCARD_PCI_T0; break; case SCARD_PROTOCOL_T1: pioSendPci = *SCARD_PCI_T1; break; default: printf("Unknown protocol. No card present?\n"); return -1; } /* APDU select applet */ printf("Select applet: "); send_length = 11; memcpy(bSendBuffer, "\x00\xA4\x04\x00\x06\xA0\x00\x00\x00\x18\xFF", send_length); for (i=0; i<send_length; i++) printf(" %02X", bSendBuffer[i]); printf("\n"); length = sizeof(bRecvBuffer); rv = SCardTransmit(hCard, &pioSendPci, bSendBuffer, send_length, &pioRecvPci, bRecvBuffer, &length); printf(" card response:"); for (i=0; i<length; i++) printf(" %02X", bRecvBuffer[i]); printf("\n"); PCSC_ERROR_EXIT(rv, "SCardTransmit") if ((bRecvBuffer[0] != 0x90) || (bRecvBuffer[1] != 0x00)) { printf("Error: test applet not found!\n"); goto end; } #ifdef VERIFY_PIN /* verify PIN */ printf(" Secure verify PIN\n"); pin_verify = (PIN_VERIFY_STRUCTURE *)bSendBuffer; /* table for bEntryValidationCondition * 0x01: Max size reached * 0x02: Validation key pressed * 0x04: Timeout occured */ /* PC/SC v2.02.05 Part 10 PIN verification data structure */ pin_verify -> bTimerOut = 0x00; pin_verify -> bTimerOut2 = 0x00; pin_verify -> bmFormatString = 0x82; pin_verify -> bmPINBlockString = 0x04; pin_verify -> bmPINLengthFormat = 0x00; pin_verify -> wPINMaxExtraDigit = 0x0408; /* Min Max */ pin_verify -> bEntryValidationCondition = 0x02; /* validation key pressed */ pin_verify -> bNumberMessage = 0x01; pin_verify -> wLangId = 0x0904; pin_verify -> bMsgIndex = 0x00; pin_verify -> bTeoPrologue[0] = 0x00; pin_verify -> bTeoPrologue[1] = 0x00; pin_verify -> bTeoPrologue[2] = 0x00; /* pin_verify -> ulDataLength = 0x00; we don't know the size yet */ /* APDU: 00 20 00 00 08 30 30 30 30 00 00 00 00 */ offset = 0; pin_verify -> abData[offset++] = 0x00; /* CLA */ pin_verify -> abData[offset++] = 0x20; /* INS: VERIFY */ pin_verify -> abData[offset++] = 0x00; /* P1 */ pin_verify -> abData[offset++] = 0x00; /* P2 */ pin_verify -> abData[offset++] = 0x08; /* Lc: 8 data bytes */ pin_verify -> abData[offset++] = 0x30; /* '0' */ pin_verify -> abData[offset++] = 0x30; /* '0' */ pin_verify -> abData[offset++] = 0x30; /* '0' */ pin_verify -> abData[offset++] = 0x30; /* '0' */ pin_verify -> abData[offset++] = 0x00; /* '\0' */ pin_verify -> abData[offset++] = 0x00; /* '\0' */ pin_verify -> abData[offset++] = 0x00; /* '\0' */ pin_verify -> abData[offset++] = 0x00; /* '\0' */ pin_verify -> ulDataLength = offset; /* APDU size */ length = sizeof(PIN_VERIFY_STRUCTURE) + offset -1; /* -1 because PIN_VERIFY_STRUCTURE contains the first byte of abData[] */ printf(" command:"); for (i=0; i<length; i++) printf(" %02X", bSendBuffer[i]); printf("\n"); printf("Enter your PIN: "); fflush(stdout); rv = SCardControl(hCard, verify_ioctl, bSendBuffer, length, bRecvBuffer, sizeof(bRecvBuffer), &length); { #ifndef S_SPLINT_S fd_set fd; #endif struct timeval timeout; FD_ZERO(&fd); FD_SET(STDIN_FILENO, &fd); /* stdin */ timeout.tv_sec = 0; /* timeout = 0.1s */ timeout.tv_usec = 100000; /* we only try to read stdin if the pinpad is on a keyboard * we do not read stdin for a SPR 532 for example */ if (select(1, &fd, NULL, NULL, &timeout) > 0) { /* read the fake digits */ char in[40]; /* 4 digits + \n + \0 */ (void)fgets(in, sizeof(in), stdin); printf("keyboard sent: %s", in); } else /* if it is not a keyboard */ printf("\n"); } printf(" card response:"); for (i=0; i<length; i++) printf(" %02X", bRecvBuffer[i]); printf("\n"); PCSC_ERROR_CONT(rv, "SCardControl") /* verify PIN dump */ printf("\nverify PIN dump: "); send_length = 5; memcpy(bSendBuffer, "\x00\x40\x00\x00\xFF", send_length); for (i=0; i<send_length; i++) printf(" %02X", bSendBuffer[i]); printf("\n"); length = sizeof(bRecvBuffer); rv = SCardTransmit(hCard, &pioSendPci, bSendBuffer, send_length, &pioRecvPci, bRecvBuffer, &length); printf(" card response:"); for (i=0; i<length; i++) printf(" %02X", bRecvBuffer[i]); printf("\n"); PCSC_ERROR_EXIT(rv, "SCardTransmit") if ((2 == length) && (0x6C == bRecvBuffer[0])) { printf("\nverify PIN dump: "); send_length = 5; memcpy(bSendBuffer, "\x00\x40\x00\x00\xFF", send_length); bSendBuffer[4] = bRecvBuffer[1]; for (i=0; i<send_length; i++) printf(" %02X", bSendBuffer[i]); printf("\n"); length = sizeof(bRecvBuffer); rv = SCardTransmit(hCard, &pioSendPci, bSendBuffer, send_length, &pioRecvPci, bRecvBuffer, &length); printf(" card response:"); for (i=0; i<length; i++) printf(" %02X", bRecvBuffer[i]); printf("\n"); PCSC_ERROR_EXIT(rv, "SCardTransmit") }
Scene* Parser::GetSceneFromFile(std::string filename) { Scene* scene = NULL; fstream fichierScene(filename.c_str(), ios::in ); if( fichierScene.is_open() ) { PRINT_GREEN("Fchier de scene bien ouvert."); scene = new Scene(); EtatTraitementScene EtatCourant = TRAITEMENT_SCENE; EtatTraitementScene EtatNouveau = TRAITEMENT_SCENE; char line[ NB_MAX_CAR_PAR_LIGNE ]; string buffer; Light light; Triangle triangle; Plan plan; Quadrique quadric; Materiau materiau; float Val0, Val1, Val2; float R, G, B; while( !fichierScene.eof() ) { fichierScene.getline( line, NB_MAX_CAR_PAR_LIGNE ); buffer = line; CStringUtils::Trim( buffer, " "); // Passer les lignes vides et les commentaires if( buffer.empty() || buffer[ 0 ] == '*' || buffer[ 0 ] == '\r' ) continue; else { // Vérifier l'arrivée d'un nouvel état de traitement bool EstNouvelObjetScene = true; if ( STRING_CHECKFIND( buffer, "Lumiere:" ) ) EtatNouveau = TRAITEMENT_LUMIERE; else if( STRING_CHECKFIND( buffer, "Poly:" ) ) EtatNouveau = TRAITEMENT_TRIANGLE; else if( STRING_CHECKFIND( buffer, "Plane:" ) ) EtatNouveau = TRAITEMENT_PLAN; else if( STRING_CHECKFIND( buffer, "Quad:" ) ) EtatNouveau = TRAITEMENT_QUADRIQUE; else EstNouvelObjetScene = false; if( EstNouvelObjetScene ) { // Ajouter objet nouvellement traité à la scène if( EtatCourant != TRAITEMENT_SCENE ) { if( EtatCourant == TRAITEMENT_LUMIERE ) scene->AddLight(light); else { switch(EtatCourant) { case TRAITEMENT_PLAN: scene->AddPlane(plan, materiau); break; case TRAITEMENT_TRIANGLE: scene->AddTriangle(triangle, materiau); break; case TRAITEMENT_QUADRIQUE: scene->AddQuadric(quadric, materiau); break; default: PRINT_RED("Cas non pris en charge."); } } } // Substituer le nouvel état pour l'ancien EtatCourant = EtatNouveau; } else { // Remplir les informations génériques de l'objet courant bool IsGenericsurfaceInfo = true; if( STRING_CHECKFIND( buffer, "color:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &R, &G, &B ); materiau.color = Vector4(R, G, B, 1.0f); } /*else if( STRING_CHECKFIND( buffer, "ambient:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); surface->AjusterCoeffAmbiant( Val0 ); } else if( STRING_CHECKFIND( buffer, "diffus:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); surface->AjusterCoeffDiffus( Val0 ); } else if( STRING_CHECKFIND( buffer, "specular:" ) ) { sscanf( buffer.c_str(), "%s %f %f", line, &Val0, &Val1 ); surface->AjusterCoeffSpeculaire( Val0 ); surface->AjusterCoeffBrillance( Val1 ); }*/ else if( STRING_CHECKFIND( buffer, "reflect:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); materiau.coeffReflexion = Val0; } else if( STRING_CHECKFIND( buffer, "refract:" ) ) { sscanf( buffer.c_str(), "%s %f %f", line, &Val0, &Val1 ); materiau.coeffRefraction = Val0; materiau.indiceRefraction = Val1; }/* else if( STRING_CHECKFIND( buffer, "rotate:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); CMatrice4 Transform = surface->ObtenirTransformation(); Transform.RotationAutourDesX( Deg2Rad<REAL>( Val0 ) ); Transform.RotationAutourDesY( Deg2Rad<REAL>( Val1 ) ); Transform.RotationAutourDesZ( Deg2Rad<REAL>( Val2 ) ); surface->AjusterTransformation( Transform ); } else if( STRING_CHECKFIND( buffer, "translate:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); CMatrice4 Transform = surface->ObtenirTransformation(); Transform.Translation( Val0, Val1, Val2 ); surface->AjusterTransformation( Transform ); } else if( STRING_CHECKFIND( buffer, "scale:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); CMatrice4 Transform = surface->ObtenirTransformation(); Transform.MiseAEchelle( Val0, Val1, Val2 ); surface->AjusterTransformation( Transform ); }*/ else IsGenericsurfaceInfo = false; if( IsGenericsurfaceInfo ) continue; } // Remplir les infos spécifiques à l'objet switch( EtatCourant ) { case TRAITEMENT_SCENE: /*if( STRING_CHECKFIND( buffer, "background:" ) ) { sscanf( buffer.c_str(), "%s %i %i %i", line, &R, &G, &B ); AjusterCouleurArrierePlan( CCouleur( R, G, B ) ); } else if( STRING_CHECKFIND( buffer, "origin:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); AjusterPositionCamera( CVecteur3( Val0, Val1, Val2 ) ); } else if( STRING_CHECKFIND( buffer, "eye:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); AjusterPointViseCamera( CVecteur3( Val0, Val1, Val2 ) ); } else if( STRING_CHECKFIND( buffer, "up:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); AjusterVecteurUpCamera( CVecteur3( Val0, Val1, Val2 ) ); } */ break; case TRAITEMENT_LUMIERE: if( STRING_CHECKFIND( buffer, "position:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); light.position = Vector3(Val0, Val1, Val2); } else if( STRING_CHECKFIND( buffer, "intens:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); light.intensity = Val0; } else if( STRING_CHECKFIND( buffer, "colorSpec:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &R, &G, &B ); light.color = Vector3(R, G, B); } break; case TRAITEMENT_TRIANGLE: if( STRING_CHECKFIND( buffer, "point:" ) ) { int PtIdx; sscanf( buffer.c_str(), "%s %i %f %f %f", line, &PtIdx, &Val0, &Val1, &Val2 ); switch(PtIdx) { case 0: triangle.p0 = Vector3(Val0, Val1, Val2); break; case 1: triangle.p1 = Vector3(Val0, Val1, Val2); break; case 2: triangle.p2 = Vector3(Val0, Val1, Val2); triangle.normale = Vector3::crossProduct(triangle.p1-triangle.p0,triangle.p2-triangle.p0); triangle.normale = triangle.normale/triangle.normale.Norm(); break; } } else if( STRING_CHECKFIND( buffer, "uv:" ) ) { int PtIdx; sscanf( buffer.c_str(), "%s %i %f %f", line, &PtIdx, &Val0, &Val1 ); switch(PtIdx) { case 0: triangle.uv0 = vec2(Val0,Val1); break; case 1: triangle.uv1 = vec2(Val0,Val1); break; case 2: triangle.uv2 = vec2(Val0,Val1); break; } } break; case TRAITEMENT_PLAN: if( STRING_CHECKFIND( buffer, "v_linear:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); //( ( CPlan* )surface )->AjusterNormale( CVecteur3( Val0, Val1, Val2 ) ); } else if( STRING_CHECKFIND( buffer, "v_const:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); //( ( CPlan* )surface )->AjusterConstante( Val0 ); } break; case TRAITEMENT_QUADRIQUE: if( STRING_CHECKFIND( buffer, "v_quad:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); quadric.A = Val0; quadric.B = Val1; quadric.C = Val2; } else if( STRING_CHECKFIND( buffer, "v_mixte:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); quadric.D = Val0; quadric.E = Val1; quadric.F = Val2; } else if( STRING_CHECKFIND( buffer, "v_linear:" ) ) { sscanf( buffer.c_str(), "%s %f %f %f", line, &Val0, &Val1, &Val2 ); quadric.G = Val0; quadric.H = Val1; quadric.I = Val2; } else if( STRING_CHECKFIND( buffer, "v_const:" ) ) { sscanf( buffer.c_str(), "%s %f", line, &Val0 ); quadric.J = Val0; } break; default: PRINT_RED("Cas non pris en charge."); } } } // Fermer le fichier de scène fichierScene.close(); // Ajouter le dernier objet traité switch(EtatCourant) { case TRAITEMENT_PLAN: scene->AddPlane(plan, materiau); break; case TRAITEMENT_TRIANGLE: scene->AddTriangle(triangle, materiau); break; case TRAITEMENT_QUADRIQUE: scene->AddQuadric(quadric, materiau); break; case TRAITEMENT_LUMIERE: scene->AddLight(light); break; default: PRINT_RED("Cas non pris en charge."); } } else PRINT_RED("[Parser::GetSceneFromFile()] : Incapable d'ouvrir " << filename); return scene; }