Wavefront OBJ解析-为什么我总是得到不正确的数据作为输出
Wavefront OBJ Parsing - why do I keep getting incorrect data as output?
我正在编写一个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){nn", lineCount );
fgets( line, BUFF_LEN, filePtr );
// append NULL term, since fgets does not
// return one.
line[ BUFF_LEN - 1 ] = ' ';
// 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 %fn", &v[ 0 ], &v[ 1 ], &v[ 2 ] );
printf( "( %i )'%f %f %f'nn",
vertexCount, v[ 0 ], v[ 1 ], v[ 2 ] );
++vertexCount;
}
}
break;
}
//...printf out the current line parsed from fgets, increment line count
}
我在C++中工作,但正在寻找一种标准的C方法。我也在使用OpenGL和Linux,尽管我不确定这是否相关。
据我所知:
- 您将一行放入缓冲区-
fgets( line, BUFF_LEN, filePtr );
- 但随后使用
fscanf
读取向量的值。。。使用filepointer
我认为您应该使用sscanf
来读取line
缓冲区。
在移动第一步文件指针之后,所以当您使用第二步时,您正在从文件中读取一些不同的数据。
一般来说,从文件中读取包括:
- 将一行读取到某个缓冲区
- 解析那个缓冲区(那个行)
- 读取另一行
关于OBJ,OBJ加载程序的更多信息
相关文章:
- 如果用户不小心给出了不正确的数据类型,cin 如何工作?
- ctypes - 结构包含垃圾/不正确的数据
- 读取来自提升binary_iarchive不正确的数据
- C++/WinRT 数据 不正确的数据封送处理
- 尝试使用 ifstream 读取数据后显示不正确的数字
- 更改CV_32FC1以CV_64FC1导致不正确的数据转换
- 逐行从文件读取到矢量对于<T>二进制数据C++不正确
- 排序向量不断修改数据并打印不正确的结果
- Winsock recv() 返回不正确的数据
- 从分层窗口获取 HBITMAP - 数据不正确
- 为什么TCP套接字在接收到不正确的ACK时发送RST数据包而不是重新发送数据
- 报告描述符和报告数据结构不正确
- 使用C++(基于C#程序)保存wav文件时,音频数据不正确
- ZigBee Arduino,解析的数据不正确
- .wav C++数据输出不正确
- 指向 VS2015 Update 2 中非静态数据成员的指针不正确
- 数组的第一个字符填充了不正确的数据C++
- 当JPEG数据不正确时,libjpeg解码崩溃
- 写入和读取 bin 文件数据不正确
- 数据C++的二进制表示显示的数据不正确