2

我有点好奇是否可以用 Java2D 编写一个简单的引擎来渲染 3D 立方体。令我惊讶的是,到目前为止,我的尝试取得了成功。到目前为止,立方体看起来还不错: 在此处输入图像描述

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

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

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

4

2 回答 2

3

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

于 2013-08-19T01:39:12.853 回答
1

这完全取决于您想了解更多信息。

  • 如果要实现Z-Buffering,则需要进行光栅化的步骤,目前Java2D已经完成。一个好的起点可能是用于渲染的扫描线算法。
  • 如果您对隐藏表面的去除和剔除更感兴趣,您可以从背面剔除开始
于 2013-08-19T01:49:26.990 回答