Java中的深度缓冲和多边形填充

时间:2013-08-19 01:23:58

标签: java 3d bitmap java-2d depth-buffer

我有点好奇,看看我是否可以在Java2D中编写一个简单的引擎来渲染3D立方体。令我惊讶的是,到目前为止,我的尝试取得了成功。到目前为止,立方体看起来很不错: enter image description here

但是,正如你所看到的,我严重缺乏深度测试。我完全迷失了如何在Java2D中进行深度测试。根据我的发现,您可以通过将每个多边形渲染为位图然后针对可能与之冲突的每个其他像素测试每个像素来实现它。这就是我迷失的地方。

我对多边形的每个顶点都有必要的深度值,但我没有每个像素的深度值。这可能是让Java2D使用fillPolygon(Polygon p)方法为我填充每个多边形的副作用。所以这让我相信如果我使用fillPolygon(..)方法渲染我的多边形,我就无法进行深度测试。我的第一个问题是:我是否可以在懒惰的同时进行z缓冲并让Java进行像素绘制?

如果没有,那么我的下一个问题是:我如何在世界上自己渲染多边形?我的意思是,我非常清楚如何在位图中存储像素然后将它们渲染成图像。我想知道如何获取每个多边形的四个顶点并适当地渲染它们。

2 个答案:

答案 0 :(得分:3)

给定三角形(或任何多边形),您可以在任何像素位置计算z值,但我认为您不能告诉java函数fillPolygon(Polygon p)仅绘制通过深度测试的多边形像素除非你的库有一些功能,也需要一个模板掩码。如果没有,您需要编写自己的光栅化器代码。这个旧的paper提供了一种非常简单的光栅化算法,适用于当今的并行硬件。

答案 1 :(得分:1)

这完全取决于您想要了解的内容。

  • 如果要实现Z-Buffering,则需要执行光栅化步骤,目前由Java2D完成。一个很好的起点可能是渲染的 scanline 算法。
  • 如果您对隐藏表面移除和剔除更感兴趣,可以从背面剔除开始
相关问题