我正在研究2D绘图库。它使用OpenGL ES和正交投影。我使用z轴只是为了对可见元素的顺序进行排序。
现在。我在VBO中有一些对象( object1 )。 VBO中的所有项目都具有整数z值:1,2,3,4,....
我创建了另一个对象( object2 )。让我们说我画了两行:
Line1 z=1
Line2 z=2
现在我想在这里绘制我的VBO( object1 ),所以我给 object1 留了一点空间,让我们说1.然后我继续填充线条,所以最后我有:
Line1 z=1
Line2 z=2
Line3 z=4 (here we give some space for object1)
Line4 z=5
到画画的时候,我用
绘制object2mat2.scaleZ = 1 / object2.lastZ
和object1:
mat1.scaleZ = 1/object1.lastZ
mat1.offsetZ = 3
mat1 = mat1*mat2 (apply object2 scale)
我用mat1绘制object1 VBO,用mat2绘制object2 VBO(这就是我需要z-ordering的原因)。
最后,我们将遵循z排序(在OpenGL中,在所有矩阵应用于vs中的顶点之后):
object2.Line1 0.1
object2.Line2 0.2
object1.Line1 0.22 << problem here!
object1.Line2 0.24
object1.Line3 0.26
object1.Line4 0.28
object2.Line3 0.3
object2.Line4 0.4
object2.Line5 0.5
object2.Line6 0.6
object2.Line7 0.7
object2.Line8 0.8
object2.Line9 0.9
object2.Line10 1.0
如您所见,object1的z波段缩小了10倍(object2中的元素数量)。 这是我的问题。如果我在object2中有1000个元素,在object1中有1000个 - 我将真正接近浮动设施。如果我想比一些object3,包括object2 ......我的z轴将浮动:)
我想到了第一件事 - 留空= object1.lastZ。它会起作用,但是如果object1会增长 - 我必须再次使用矩阵缩小它(也许会得到相同的问题)。
第二件事 - 在2个VBO中划分object2。但这并不好,因为我可能想要经常插入object1 - 然后我将从object2获得大量的VBO,这不是一个选项。
有人可以告诉我这件事吗?也许我应该采取另一种方法?
P.S。也许我只是误解了aprox中的浮点精度。点后有7个数字?