繁体   English   中英

在波前目标文件(.obj)中,我应该如何在opengl中渲染具有4个以上顶点的面?

[英]in a wavefront object file (.obj) how am i supposed to render faces with more than 4 vertices in opengl?

因此,使用Wavefront目标文件应该如何在OpenGL中渲染具有4个以上顶点的面?

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

首先,应告诉任何导出工具不要导出具有多个顶点的面。 面应具有3个顶点,周期。

如果您的导出工具无法做到这一点,那么您的加载工具应将多边形分解为3个顶点面。 我相当确定Asset Importer库可以做到这一点。

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

我不同意Nicol Bolas的观点,尽管GL_TRIANGLE_FAN ,但面应始终具有3个顶点,如果多边形遵循上述规则,则使用GL_TRIANGLE_FAN简化代码并减少系统内存消耗。 无论如何,GPU面不会改变,因为多边形将分解为三角形。

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

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

// 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或手动形成自己的三角带可以产生更好的视觉效果。 但这在波前OBJ文件中很少见。

如果脸部是共面但凹入的,则需要使用算法(例如耳夹法)对脸部进行三角剖分。

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

如果顶点不是共面的,那么您会被拧紧,因为OBJ不会保留足够的信息来知道要进行细分的形状。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM