代码之家  ›  专栏  ›  技术社区  ›  Jeff Storey

OpenGL纹理映射

  •  0
  • Jeff Storey  · 技术社区  · 14 年前

    我在OpenGL的屏幕上画了两个对象,一个是使用glu对象的球体,另一个是纹理映射的星形。不管z坐标是什么,纹理映射的星星总是在前面绘制。这是正常的OpenGL行为吗?有没有办法防止这种情况发生?

    注意:我在世界范围内工作,所以可能是其他事情导致了这一点。但我只是想知道纹理映射对象出现在前面是否正常?我不这么认为,但我不确定…

    1 回复  |  直到 13 年前
        1
  •  0
  •   the swine    13 年前

    这不是世界上的一个错误,这实际上是所期望的行为。使用glvertex2f()与使用glvertex3f()和设置z=0相同。所以它只是在一个离观察者非常近的平面上画出恒星(也取决于你的投影)。

    要解决您的问题,您可以使用gldepthmask(0)禁用深度写入,然后绘制星形,调用gldepthmask(1),然后绘制球体,球体现在将位于星形前面。

    您还可以在星上使用gldepthfunc(gl_greater)或在球体上使用gldisable(gl_depth_test),以快速实现相同的效果。

    要使任何事情变得更复杂(例如恒星与球体相交),您需要使用矩阵将恒星放置在所需的位置。