none
Wpf 3d 程序,如何保证在宽度增加的时候,视觉对象保持位置以及大小不变 RRS feed

  • 问题

  • Viewport3D包含在Grid里。当Grid由原来的800宽度,变成1600宽度时,3d对象会相应的放大。这个时候将摄像机由原来的z 30 变成 z 60 ,这样3d 对象近似大小未变。然后位置却发生了变动。那么如何保持位置以及大小不变呢?

    z30时

    z 60时

    2019年8月10日 11:11

全部回复

  • Hi    jinli.zh,

    >>Viewport3D包含在Grid里。当Grid由原来的800宽度,变成1600宽度时,3d对象会相应的放大。这个时候将摄像机由原来的z 30 变成 z 60 ,这样3d 对象近似大小未变。然后位置却发生了变动。那么如何保持位置以及大小不变呢?

    你是由于调整Grid的大小后,Viewport3D的相对位置发生了变化。

    你可以尝试使用Canvas,并将Viewport3D放置在里面。或者在Grid变化的同时调整Viewport3D相对的位置。

      <Grid Height="450" Width="800">
            <Canvas>
                <Viewport3D Name="viewport3D1"  Width="600"  Height="400" >
    
    Best regards

    Yong Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年8月12日 9:15
    版主
  • 这个方法是可以达到效果。

    但是,我想要的是Viewport3D在放大的情况下,最左侧,最右侧的对象保持位置,大小,角度不变。只是中间部分,如第一个图中的“简单一句话”所在对象由现在可容纳5个变成,可容纳10个左右。

    使用canvas是一个整体的操作。而我想要的是部分操作。

    请问有什么办法嘛?

    2019年8月12日 10:06
  • Hi  jinli.zh,  

    canvas 可以设置Top 和left的值来国定左右侧的对象。然后中间通过计算可以添加多了。
    Canvas.SetLeft(greenRectangle, 110);    
        Canvas.SetTop(greenRectangle, 110);    



    Best regards

    Yong Lu

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年8月13日 7:29
    版主
  • setLeft是可以调整对象的left。但是,我这里要调整的是viewport3d的子对象。canvas无能为力了。
    2019年8月13日 14:32
  • 可以相对地改变相机的视角宽度FOV

    当V3D宽度变大时,会减小相机与物体之间距离。所以适当调整FOV是可以改变物体显示不全

    2019年8月14日 1:05