three.js中的方法以正交方式显示场景的切片

时间:2013-03-29 19:55:58

标签: 3d three.js webgl

我有一个使用three.js渲染的相当简单的场景。我试图渲染场景的一部分,就像MRI一样。

我已经为测试目的制作了两个版本的场景。

  1. 透视版本,这很棒
  2. 正交版本,应该只是给定平面上场景的一部分
  3. 渲染正交场景没有问题。我曾尝试使用剪切平面捕获切片,但无法使其工作。我得到一个完全白色的屏幕或整个模型。

    以下是我希望实现的自上而下的观点:

    100 *----------------------------------*
        |                                  |
        |                                  |
        |                                  |
        |                                  |
        ####################################  <-- Capture this slice of 100 units width
        |                                  |
        |                                  |
        |                                  |
        |                                  |
     0  *----------------------------------*
        0                                  100
    
    
    
    
    
                        \  /
                         \/
                       CAMERA roughly @ (50, -100)
    

    我完全有可能错过一些明显的东西。我的3D背景很不错,但我不是专家。

    在Three.js / WebGL中,最好的方法是什么?摄像机的最佳位置是什么?

    PS:是的,我知道切片一些原语不会很好。我正在使用一个由线和点构建的模型,我希望它能够相当安全地切片。将物体切成两半对我来说并不是一个问题。

1 个答案:

答案 0 :(得分:2)

答案结果是相机放置。事后证明,相机不应该像透视投影所需的那样从场景中退回。将相机放在模型的边缘就可以了,并且剪裁平面(近,远)正常工作。

例如:

    Z
100 *----------------------------------*
    |                                  |
    |                                  |
75  |                                  |
    |                                  |
    |                                  |
50  |                                  |
    |                                  |
    |                                  |
25  ####################################  <-- Capture this slice of 5 units
    |                                  |      width @ z = 25
    |                                  |
 0  *-----------------X----------------* Y
    0                 .                100
                      .
                      .
                   CAMERA is here at (50,0)
                   near = 25
                   far  = 30 (for width 5, ie: 25 + 5)