JavaFX 8 - 如何在并行相机上设置 NearClip 和 FarClip?

Posted

技术标签:

【中文标题】JavaFX 8 - 如何在并行相机上设置 NearClip 和 FarClip?【英文标题】:JavaFX 8 - How to set NearClip and FarClip on a Parallel Camera? 【发布时间】:2015-03-04 22:42:33 【问题描述】:

我是一个构建应用程序的团队的一员,该应用程序使用 JavaFX 8 3D 操作视觉模型。我们同时使用透视相机和平行相机。透视相机按预期工作。它目前正在使用isEyeAtCameraZero false。这样做是为了最大限度地兼容 Parallel Camera。

当调用camera.setNearClip()camera.setFarClip() 时,透视相机的行为正确。

Parallel Camera 似乎没有响应 camera.setNearClip()camera.setFarClip()。 Parallel Camera 确实执行了远近剪辑,但我一直无法更改 Parallel Camera 剪辑范围。

我正在使用基于 JavaFX 8 Camera javadocs 页面上的伪代码的算法来计算传递给 camera.setNearClip()camera.setFarClip() 的值。这似乎适用于透视相机,但不适用于平行相机。

谁能提供关于如何管理平行相机的剪辑范围的建议?

【问题讨论】:

我来晚了!;但我要感谢 InteractiveMesh。因此,我们通过将 Persective field of view 设置为一个非常小的角度来模拟 ParallelCamera,并计算相机到目标所需的距离,以便用目标对象填充视图。这有点杂乱无章,但最终用户很高兴,并且确实产生了可观的场景正交视图。 你的应该是正确的答案,因为它似乎可以模拟 ParallelCamera。我刚刚尝试了camera.setFieldOfView(1);camera.setTranslateZ(-26*cameraDistance); 的值,cameraDistance 是我用于“正常”透视相机的距离。失去 z 深度后看起来还不错 【参考方案1】:

ParallelCamera 在计算正交投影时似乎忽略了剪裁距离。相反,场景/子场景的宽度或高度根据包私有方法确定远近裁剪平面:

void computeProjectionTransform(GeneralTransform3D proj) 
    final double viewWidth = getViewWidth();
    final double viewHeight = getViewHeight();
    final double halfDepth = (viewWidth > viewHeight) ? viewWidth / 2.0 : viewHeight / 2.0;

    proj.ortho(0.0, viewWidth, viewHeight, 0.0, -halfDepth, halfDepth);

这使得 ParallelCamera 对于 JavaFX 中的 3D 渲染毫无用处。

【讨论】:

以上是关于JavaFX 8 - 如何在并行相机上设置 NearClip 和 FarClip?的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaFX 的舞台上设置图标

JavaFX 可拖动背景 - 替代使用相机?

JavaFX中的2D相机?

如何在 JavaFX 中将图像设置为按钮的大小

JavaFX8 - sun.util.logging.PlatformLogger 在 NetBeans 8 中找不到异常

如何将行和列添加到 JavaFX 8 TableView