我正在从obj、colladae文件加载模型,在这些文件中,如果导出时所有面都是完美的四边形,则网格的各个面不会被三角化以节省内存。
现在我知道这对大多数模型都不起作用,但对于一些网格,比如立方体,每个面都可以避免一些重复,我想让它起作用。
我有两个使用三角形条纹或gl_quads的选项。
三角形条的问题是相邻的面是连接的,所以它们之间不可能有一些间隙,即使对于一个简单的立方体,输出在外面看起来也是正确的,但当我进入立方体内部时,即使启用了背面剔除,我也会看到一些零散的三角形连接着立方体的正面和背面,基本上是一片混乱。
但是有了gl_quads,一切都能正常工作,但文档说quads在3.1中不推荐使用[尽管我仍然可以使用它gl 4.0],所以我的问题是
我可以继续使用gl_quads从文件加载网格而不会在将来遇到问题吗?或者我如何用三角形条带替换它而不会出现整个连接问题?。
我发现的一个解决方案是为for循环中的每4个顶点发出一个draw调用,但这对大型网格的性能来说非常糟糕。
有什么建议吗?
我们还能使用GL_QUADS吗?
是,如果使用兼容配置文件OpenGL上下文。
我是否可以继续使用gl_quads从文件加载网格,而不会在将来遇到问题。。。?
平台可以选择不实现兼容性配置文件。大多数桌面平台都这样做,而且从那时起就一直这样做。如果现有的实现决定放弃它,我会感到惊讶。
。。。或者我如何用三角形条代替它而不存在整个连接问题?
渲染断开连接的四边形(通常是三角形条带(的一种方法是在同一点绘制两个顶点,然后移动到下一个条带应该继续的位置,请参阅此问题。
更简单的方法是生成一系列索引,如[1 2 3,1 3 4,5 6 7,5 7 8,…],并使用这些索引渲染四边形网格。