首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.ply中呈现OpenGL文件

在.ply中呈现OpenGL文件
EN

Stack Overflow用户
提问于 2013-10-26 16:48:18
回答 1查看 3.7K关注 0票数 3

因此,我能够从.ply文件中读出所需的顶点、法线和索引,并将它们写入VBO。但是,我没有得到正确的形状。我的指数好像没了。

这是我的结构:

代码语言:javascript
复制
typedef struct vtx {
    float x, y, z;
    float nx, ny, nz;
} vtx;

typedef struct Face {
    unsigned int count;
    unsigned int *vertices;
    float nx, ny, nz;
} Face;

typedef struct PLY_vals {
    Face **f;
    vtx **v;
    unsigned int vcount;
    unsigned int fcount;
    int norms;
    float center[3];
} PLY_vals;

建立顶点和三角形:

代码语言:javascript
复制
nindices = ply.fcount * 3;
nvertices = ply.vcount;
pindices = new GLuint[nindices];
plyverts = new Vertex[nvertices];

for (int i = 0; i < nvertices; i++)
{
    // Vertices
    plyverts[i].location[0] = ply.v[i]->x;
    plyverts[i].location[1] = ply.v[i]->y;
    plyverts[i].location[2] = ply.v[i]->z;
    plyverts[i].location[3] = 1;

    // Normals
    plyverts[i].normal[0] = ply.v[i]->nx;
    plyverts[i].normal[1] = ply.v[i]->ny;
    plyverts[i].normal[2] = ply.v[i]->nz;
    plyverts[i].normal[3] = 0;
}

// set indices (assumes all faces have 3 vertices
int pos=0;
for (int i = 0; i < nindices/3; i++)
{
    pindices[pos++] = ply.f[i]->vertices[0];    // first vertex
    pindices[pos++] = ply.f[i]->vertices[1];    // second vertex
    pindices[pos++] = ply.f[i]->vertices[2];    // third vertex
}

这应该是只兔子:

有什么想法吗?我猜这些顶点不是按正确的顺序排列的,但我查过了,它们似乎是匹配的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 15:20:07

当我为GL_UNSIGNED_SHORT函数使用GL_UNSIGNED_INT类型说明符而不是GL_UNSIGNED_INT类型说明符时,我也遇到了同样的问题。兔子模型(我猜是斯坦福兔子?)有超过200000个顶点,所以没有符号的空不足以存储索引,因为它的最大值是65535,因此应该使用无符号int。也许这就是你问题的答案?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19609248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档