2

Wavefront .OBJ メッシュ パーサーを作成しています。私はこれに約 3 週間取り組んできましたが、文字ごとに解析していたので、大部分を書き直すことにしました (最終的に複雑すぎると感じましたが、そうではありませんでした。とにかく正常に動作していません)。行ごとに解析してきたので、結果が悪化しているように感じます。

これが私の出力の例です:

( STREAM ):# cube.obj


}

(LINE 2){

( STREAM ):#


}

(LINE 3){

( STREAM ): 


}

(LINE 4){

( STREAM ):g cube


}

(LINE 5){

( STREAM ): 


}

(LINE 6){

( VERTEX: 1 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 0.0 0.0 0.0


}

(LINE 7){

( VERTEX: 2 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 0.0 0.0 1.0


}

(LINE 8){

( VERTEX: 3 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 0.0 1.0 0.0


}

(LINE 9){

( VERTEX: 4 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 0.0 1.0 1.0


}

(LINE 10){

( VERTEX: 5 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 1.0 0.0 0.0


}

(LINE 11){

( VERTEX: 6 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 1.0 0.0 1.0


}

(LINE 12){

( VERTEX: 7 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 1.0 1.0 0.0


}

(LINE 13){

( VERTEX: 8 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000'

( STREAM ):v 1.0 1.0 1.0


}

f簡単にするために、現在、インデックス ( で始まる行) の解析には取り組んでいません。

これまでに試したこと(頂点データの場合)

  • strtof( pLine, &pLine ): これにより、頂点のゼロが生成されました

  • current implementation within the following code: ゼロは生成されませんが、格納された実際のデータではありません

コード

   //...declare lineCount and vertexCount above
   // NOTE: BUFF_LEN == 200

    while( !feof( filePtr ) )
    {
        printf( "(LINE %i){\n\n", lineCount );

        fgets( line, BUFF_LEN, filePtr );


        // append NULL term, since fgets does not
        // return one.

        line[ BUFF_LEN - 1 ] = '\0';

        // evaluate the first character
        switch( line[ 0 ] )
        {
            case 'v':
            {
                if ( line[ 1 ] == ' ' )
                {
                    // we have a vertex, not a normal

                    SIMD_VEC3 v;

                    fscanf( filePtr, " %f %f %f\n", &v[ 0 ], &v[ 1 ], &v[ 2 ] );

                    printf( "( %i )\'%f %f %f\'\n\n",
                            vertexCount, v[ 0 ], v[ 1 ], v[ 2 ] );

                    ++vertexCount;
                }
            }
                break;
        }
    //...printf out the current line parsed from fgets, increment line count
    }

私は C++ で作業していますが、標準的な C のアプローチを探しています。OpenGL と Linux も使用していますが、関連性があるかどうかはわかりません。

4

1 に答える 1