【问题标题】:Depth buffering and polygon filling in JavaJava中的深度缓冲和多边形填充
【发布时间】:2013-08-19 01:23:57
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我认为不会。感谢您将我链接到那篇文章。它澄清了很多关于光栅化的问题。我会试试我的运气,然后从那里开始进行深度测试。谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的指点,他们帮助我在 Google 上指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2014-02-03
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多