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

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

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

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

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

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

最佳答案

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

关于java - Java中的深度缓冲和多边形填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305281/

相关文章:

java - 在 Weblogic12 上使用 JPA2.1 与 Hibernate 5 : java. lang.NoClassDefFoundError : Could not initialize class org. hibernate.jpa.HibernatePersistenceProvider

c++ - 在自定义 Paraview 过滤器中使用 vtkPolyLine 时出现段错误

3d - 3D 编程概念指南?

multithreading - 如何暂停一个线程?

mysql - 我可以在 1 列中保存 7 个 boolean 值吗?

java - 将 Google Play 服务库添加到 Qt 项目

java - 设置阿拉伯数字系统区域设置不显示阿拉伯数字

javascript - 在 Three.js PointCloud 中将正方形更改为圆形?

java - 将 Bitmap 转换为 Bitmap[] 数组

java - 如何在 Play 中的多个应用程序之间共享模型!框架?