OpenGL - 非常奇怪的伪影。只有当有很多相同类型的对象实例时才会发生

Posted

技术标签:

【中文标题】OpenGL - 非常奇怪的伪影。只有当有很多相同类型的对象实例时才会发生【英文标题】:OpenGL - Very strange artifacts.. Only happens when there is a lot of instances of the same type of object 【发布时间】:2013-08-19 19:56:01 【问题描述】:

所以基本上我正在创建一个 2D 游戏。我正在使用 VBO 和 GLSL 着色器。现在我要做的是,我加载的每个纹理,我为它创建一个 VBO,所以每个使用该纹理的可绘制对象它的元素都将插入到该 VBO 中。所以前段时间我试图通过创建很多小盒子并将它们彼此相邻放置来创建一个类似网格的对象。它们都在同一个 VBO 中,因为它们都具有相同的纹理来创建类似网格的对象。一旦他们超过 10 个左右,他们就开始有奇怪的文物。

所以我通过创建一个大的可绘制对象并在其上多次重复纹理来绕过这个问题。文物不见了。现在我开始进行文本映射(每个字母都是一个实例,但它们共享相同的纹理、文本映射),我注意到当我超过 6 个字母时开始出现伪影。我不知道为什么会发生这种情况,我什至没有线索。

所以我想知道是否有人知道可能导致此问题的原因..

注意:我还注意到,在我的照明系统(相同的纹理但不同的 RGB 值)中,如果我将两盏灯彼此靠得太近,它们会在像 3 一样出现伪像后相交。这可能是原因,因为文本实际上是由于填充而相交的。如何修复 2 个相交的纹理并使用导致伪影的相同纹理?

编辑:^^^ 没关系,我删除了填充并且工件仍然存在..

【问题讨论】:

阅读说明!它可能会给你一个线索..:P 实际上我不确定这是否正确,因为我删除了填充,因此它们不会相交并且仍然存在伪像.. 添加了一些代码和图片来帮助.. 您是否将正确的数字作为第二个参数传递给glDrawElements?它应该是您要使用的索引数。看起来一些额外的三角形是用虚假数据绘制的。 哇,谢谢,我没听懂 :) 谢谢,请提交这个作为答案,我想给你点数.. 【参考方案1】:

解决了。问题是,在 glDrawElements 的第二个参数中,我传入的数字大于我拥有的实际索引数量,因此 OpenGL 试图渲染额外的三角形。

【讨论】:

以上是关于OpenGL - 非常奇怪的伪影。只有当有很多相同类型的对象实例时才会发生的主要内容,如果未能解决你的问题,请参考以下文章

统一烘焙光照贴图时出现奇怪的伪影

在相机后面的位置进行广告牌时的伪影

使用设置了角半径的 UIButton 时出现奇怪的伪影

在 OpenGL 中将深度渲染到纹理时出现奇怪的结果

GLSL 计算着色器闪烁块/正方形伪影

使用 ggplot2 绘制 shapefile 的伪影