OpenGL z轴深度最佳实践

时间:2013-12-26 16:27:17

标签: opengl-es

我正在研究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

到画画的时候,我用

绘制object2
  

mat2.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个数字?

0 个答案:

没有答案