首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在一个波前对象文件(.obj)中,我应该如何在opengl中渲染超过4个顶点的面?

在一个波前对象文件(.obj)中,我应该如何在opengl中渲染超过4个顶点的面?
EN

Stack Overflow用户
提问于 2012-02-05 13:40:53
回答 3查看 7.7K关注 0票数 7

那么在OpenGL中如何使用Wavefront object file来渲染顶点超过4个的面呢?

我知道如果它有3个顶点我使用GL_TRIANGLES,如果它有4个我使用GL_QUADS,但如果它有5个或更多,我应该使用什么?有没有标准?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-05 17:26:22

OBJ导出器将以合理的顺序导出每个面的顶点(逆/顺时针),只要你的面是共面和凸面(他们血腥应该是!)-你可以使用GL_TRIANGLE_FAN。

我不同意Nicol Bolas的观点,面部应该总是有3个顶点,尽管很简单,如果你的多边形遵循上面的规则,使用GL_TRIANGLE_FAN可以简化你的代码并减少系统内存消耗。没有什么会改变GPU的一面,因为多边形将被分解成三角形。

票数 7
EN

Stack Overflow用户

发布于 2012-02-05 14:00:36

首先,您应该告诉任何导出工具不要导出具有那么多顶点的面。面应该有3个顶点,句号。

如果你的导出工具不能做到这一点,那么你的加载工具应该将多边形分解为3个顶点面。我相当肯定the Asset Importer library可以做到这一点。

票数 9
EN

Stack Overflow用户

发布于 2013-09-08 13:58:17

实际上,大多数wavefront-obj面都是共面和凸面的,但我在original OBJ specification中找不到任何可以保证这一点的东西。

如果面是共面和凸面,则可以使用GL_TRIANGLE_FAN,也可以使用GL_TRIANGLE并手动评估风扇。扇形的所有三角形共享第一个顶点。如下所示:

代码语言:javascript
复制
// manually generate a triangle-fan
for (int x = 1; x < (faceIndicies.Length-1); x++) {
    renderIndicies.Add(faceIndicies[0]);
    renderIndicies.Add(faceIndicies[x]);
    renderIndicies.Add(faceIndicies[x+1]);
}

如果n边形中的顶点数量较多,则使用GL_TRIANGLE_STRIP或手动形成您自己的三角形条带可以产生更好的视觉效果。但这在wavefront OBJ文件中很少见。

如果面是共面的但是凹的,则需要使用某种算法对面进行三角剖分,例如耳朵修剪法。

http://en.wikipedia.org/wiki/Polygon_triangulation#Ear_clipping_method

如果垂直不是共面的,你就完蛋了,因为OBJ没有保留足够的信息来知道想要的是什么形状的镶嵌。

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

https://stackoverflow.com/questions/9147197

复制
相关文章

相似问题

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