简单的 Assimp 程序提供不正确的数据
Simple Assimp Program Giving Incorrect Data
我正在尝试使用 Assimp 从 obj 文件加载模型,但它提供了不正确的数据。我尝试了几种不同的方法,但找不到问题所在。
顶点位置有偏差(轻微),但有趣的是面部数据格式不正确。在我的 OBJ 文件(包括在内)中有 20 张面孔。对于这个例子,我的程序显示了 20 张面孔,但其中一些只有 2 个索引!这是带有三角测量标志的,所以我不知道这是 assimp 中的错误还是我的代码中的错误。我也尝试了其他一些标志,但 none 似乎有效。
我压缩了似乎导致以下问题的代码
test.cpp
#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <SDL2/SDL_opengl.h>
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
#define GLM_FORCE_RADIANS
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <iostream>
using namespace std;
int main(int argc, char* args[])
{
Assimp::Importer importer;
const aiScene * scene = NULL;
scene = importer.ReadFile("box.obj", aiProcess_JoinIdenticalVertices | aiProcess_Triangulate);
if(!scene)
{
return -1;
}
for(GLuint i = 0; i < scene->mNumMeshes; i++)
{
const aiMesh* mesh = scene->mMeshes[i];
//float* vertices = new float[mesh->mNumVertices * 3];
//float* faces = new float[mesh->mNumFaces * 3];
cout << "has positions: " << mesh->HasPositions() << " has faces: " << mesh->HasFaces() << endl;
cout << "vertex count: " << mesh->mNumVertices << endl;
cout << "face count: " << mesh->mNumFaces << endl;
for(GLuint j = 0; j < mesh->mNumFaces; j++)
{
cout << "Face Indices: " << mesh->mFaces[j].mNumIndices << " ";
for(GLuint k = 0; k < mesh->mFaces[j].mNumIndices; k++)
{
cout << "I" << k << " V" << mesh->mFaces[j].mIndices[k] << " ";
}
cout << endl;
//faces[j * 3] = mesh->mFaces[j].mIndices[0];
//faces[j * 3 + 1] = mesh->mFaces[j].mIndices[1];
//faces[j * 3 + 2] = mesh->mFaces[j].mIndices[2];
}
}
return 0;
}
box.obj
v 0.000 0.000 1.000
v 0.894 0.000 0.447
v 0.276 0.851 0.447
v -0.724 0.526 0.447
v -0.724 -0.526 0.447
v 0.276 -0.851 0.447
v 0.724 0.526 -0.447
v -0.276 0.851 -0.447
v -0.894 0.000 -0.447
v -0.276 -0.851 -0.447
v 0.724 -0.526 -0.447
v 0.000 0.000 -1.000
f 2 1 0
f 3 2 0
f 4 3 0
f 5 4 0
f 1 5 0
f 11 6 7
f 11 7 8
f 11 8 9
f 11 9 10
f 11 10 6
f 1 2 6
f 2 3 7
f 3 4 8
f 4 5 9
f 5 1 10
f 2 7 6
f 3 8 7
f 4 9 8
f 5 10 9
f 1 6 10
输出
has positions: 1 has faces: 1
vertex count: 11
face count: 20
Face Indices: 2 I0 V0 I1 V1
Face Indices: 2 I0 V2 I1 V0
Face Indices: 2 I0 V3 I1 V2
Face Indices: 2 I0 V4 I1 V3
Face Indices: 2 I0 V1 I1 V4
Face Indices: 3 I0 V5 I1 V6 I2 V7
Face Indices: 3 I0 V5 I1 V7 I2 V8
Face Indices: 3 I0 V5 I1 V8 I2 V9
Face Indices: 3 I0 V5 I1 V9 I2 V10
Face Indices: 3 I0 V5 I1 V10 I2 V6
Face Indices: 3 I0 V1 I1 V0 I2 V6
Face Indices: 3 I0 V0 I1 V2 I2 V7
Face Indices: 3 I0 V2 I1 V3 I2 V8
Face Indices: 3 I0 V3 I1 V4 I2 V9
Face Indices: 3 I0 V4 I1 V1 I2 V10
Face Indices: 3 I0 V0 I1 V7 I2 V6
Face Indices: 3 I0 V2 I1 V8 I2 V7
Face Indices: 3 I0 V3 I1 V9 I2 V8
Face Indices: 3 I0 V4 I1 V10 I2 V9
Face Indices: 3 I0 V1 I1 V6 I2 V10
我知道没有删除等,我只是想尽可能多地删除代码,以便更容易找到问题。
它的价值系统= Ubuntu 15.04。昨晚升级了,希望是系统问题
因为面中的顶点数应该是从1开始的,而不是从0开始的。
我正在尝试使用 Assimp 从 obj 文件加载模型,但它提供了不正确的数据。我尝试了几种不同的方法,但找不到问题所在。
顶点位置有偏差(轻微),但有趣的是面部数据格式不正确。在我的 OBJ 文件(包括在内)中有 20 张面孔。对于这个例子,我的程序显示了 20 张面孔,但其中一些只有 2 个索引!这是带有三角测量标志的,所以我不知道这是 assimp 中的错误还是我的代码中的错误。我也尝试了其他一些标志,但 none 似乎有效。
我压缩了似乎导致以下问题的代码
test.cpp
#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <SDL2/SDL_opengl.h>
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
#define GLM_FORCE_RADIANS
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <iostream>
using namespace std;
int main(int argc, char* args[])
{
Assimp::Importer importer;
const aiScene * scene = NULL;
scene = importer.ReadFile("box.obj", aiProcess_JoinIdenticalVertices | aiProcess_Triangulate);
if(!scene)
{
return -1;
}
for(GLuint i = 0; i < scene->mNumMeshes; i++)
{
const aiMesh* mesh = scene->mMeshes[i];
//float* vertices = new float[mesh->mNumVertices * 3];
//float* faces = new float[mesh->mNumFaces * 3];
cout << "has positions: " << mesh->HasPositions() << " has faces: " << mesh->HasFaces() << endl;
cout << "vertex count: " << mesh->mNumVertices << endl;
cout << "face count: " << mesh->mNumFaces << endl;
for(GLuint j = 0; j < mesh->mNumFaces; j++)
{
cout << "Face Indices: " << mesh->mFaces[j].mNumIndices << " ";
for(GLuint k = 0; k < mesh->mFaces[j].mNumIndices; k++)
{
cout << "I" << k << " V" << mesh->mFaces[j].mIndices[k] << " ";
}
cout << endl;
//faces[j * 3] = mesh->mFaces[j].mIndices[0];
//faces[j * 3 + 1] = mesh->mFaces[j].mIndices[1];
//faces[j * 3 + 2] = mesh->mFaces[j].mIndices[2];
}
}
return 0;
}
box.obj
v 0.000 0.000 1.000
v 0.894 0.000 0.447
v 0.276 0.851 0.447
v -0.724 0.526 0.447
v -0.724 -0.526 0.447
v 0.276 -0.851 0.447
v 0.724 0.526 -0.447
v -0.276 0.851 -0.447
v -0.894 0.000 -0.447
v -0.276 -0.851 -0.447
v 0.724 -0.526 -0.447
v 0.000 0.000 -1.000
f 2 1 0
f 3 2 0
f 4 3 0
f 5 4 0
f 1 5 0
f 11 6 7
f 11 7 8
f 11 8 9
f 11 9 10
f 11 10 6
f 1 2 6
f 2 3 7
f 3 4 8
f 4 5 9
f 5 1 10
f 2 7 6
f 3 8 7
f 4 9 8
f 5 10 9
f 1 6 10
输出
has positions: 1 has faces: 1
vertex count: 11
face count: 20
Face Indices: 2 I0 V0 I1 V1
Face Indices: 2 I0 V2 I1 V0
Face Indices: 2 I0 V3 I1 V2
Face Indices: 2 I0 V4 I1 V3
Face Indices: 2 I0 V1 I1 V4
Face Indices: 3 I0 V5 I1 V6 I2 V7
Face Indices: 3 I0 V5 I1 V7 I2 V8
Face Indices: 3 I0 V5 I1 V8 I2 V9
Face Indices: 3 I0 V5 I1 V9 I2 V10
Face Indices: 3 I0 V5 I1 V10 I2 V6
Face Indices: 3 I0 V1 I1 V0 I2 V6
Face Indices: 3 I0 V0 I1 V2 I2 V7
Face Indices: 3 I0 V2 I1 V3 I2 V8
Face Indices: 3 I0 V3 I1 V4 I2 V9
Face Indices: 3 I0 V4 I1 V1 I2 V10
Face Indices: 3 I0 V0 I1 V7 I2 V6
Face Indices: 3 I0 V2 I1 V8 I2 V7
Face Indices: 3 I0 V3 I1 V9 I2 V8
Face Indices: 3 I0 V4 I1 V10 I2 V9
Face Indices: 3 I0 V1 I1 V6 I2 V10
我知道没有删除等,我只是想尽可能多地删除代码,以便更容易找到问题。
它的价值系统= Ubuntu 15.04。昨晚升级了,希望是系统问题
因为面中的顶点数应该是从1开始的,而不是从0开始的。