【问题标题】:Absolute scaling of SubScene in JavaFx 3DJavaFx 3D 中 SubScene 的绝对缩放
【发布时间】:2018-02-11 21:19:48
【问题描述】:

我正在寻找以厘米为单位的实际距离建模。因此,以下包含一个简单矩形的 SubScene 的宽度和高度与我的模型距离(以厘米为单位)相关联。代码可以正确呈现某些矩形大小(100 厘米),但不能正确呈现其他大小(200 厘米)。当我说它有效时,我看到的红色矩形是窗格大小的 1/3……那是视野。当它不起作用时,窗格是空白的。奇怪的是,我安排了缩放比例,因此所有比例都是通过从 size_cm 参数定位相机和 fieldOfView 角度来固定的。所以我很困惑为什么改变这个绝对比例很重要。我在这里使用 Kotlin,但我希望直接使用 Java 也是如此。我很感激任何想法。

class Scale3D : View("My View") {
val size_cm = 100.0 //works,  200.0 //fails
val cameraFOV_pix = 600.0
val cameraFOV_cm = 3.0 * size_cm
val cameraZOffset_cm = 1.0 * size_cm

val testBox = Rectangle(size_cm, size_cm).apply{
    fill= Color.RED
    translateX = -size_cm / 2.0
    translateY = -size_cm / 2.0
}

val vCamera = PerspectiveCamera(true).apply{
    translateZ = -cameraZOffset_cm
    fieldOfView = 2.0*Math.toDegrees(Math.atan2(cameraFOV_cm/2.0, cameraZOffset_cm))
    println("angle=%.1f deg".format(fieldOfView))
}

override val root = anchorpane {
    val rootVx = Group(vCamera,testBox)
    val subScene = SubScene(rootVx, cameraFOV_pix, cameraFOV_pix,true, SceneAntialiasing.BALANCED).apply {
        fill = Color.ALICEBLUE
        camera = vCamera
    }
    children.addAll(subScene)
}

}

【问题讨论】:

    标签: javafx-3d


    【解决方案1】:

    我猜你必须考虑剪切平面。有近剪裁平面和远剪裁平面。近/远剪辑平面定义了物体将被渲染的相对于相机的最近/最远点(例如https://docs.oracle.com/javafx/8/3d_graphics/camera.htm)。近剪裁平面的默认值为 0.1,远剪裁平面的默认值为 100.0 (https://docs.oracle.com/javase/9/docs/api/javafx/scene/Camera.html#farClipProperty)。 在您的场景中,对象位于所有距离 cameraZOffset_cm > 100.0(= 远剪辑默认值)的远剪辑平面的后面。因为 cameraZOffset_cm = 1.0 * size_cm 这对应于 size_cm > 100.0。因此,您的对象不会针对大于 100.0 的所有尺寸进行渲染。 您只需使用 camera.setFarClip(cameraZOffset_cm) 或相应的 Kotlin 命令将远剪辑增加到至少 cameraZOffset_cm。

    【讨论】:

    • 谢谢,我添加了 Kotlin 等效项,它可以工作。 -->farClip=cameraZOffset_cm
    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 2013-12-16
    • 1970-01-01
    • 2017-09-25
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多