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?的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX8 - sun.util.logging.PlatformLogger 在 NetBeans 8 中找不到异常