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 も使用していますが、関連性があるかどうかはわかりません。