virtools二维坐标系概念总结

用vsl或SDK编写BB或插件时,获取二维平面坐标需要区分RenderContext的不同窗口,如下图所示:

1.Entire Window: RenderContext 上图最外侧红色圆点标记处

2.Window Rect:窗口矩形,与窗口分辨率有关。

3.View Rect:视口矩形,与摄像机分辨率(摄像机窗口纵横比)有关。


        当调用Pick2D()方法获取二维帧时,需要注意的是传入的Vector2D参数是基于RenderContext坐标系的,而通过GetPosition()方法获取的Vector2D是基于ViewRect(视口矩形)坐标系的,由于坐标系的不同,如果不做处理,必然导致程序逻辑错误,达不到预期效果。


        解决方法也简单,做Pick2D处理时,将二维坐标与窗口坐标和视口坐标相加,转换到渲染环境坐标系下。

        VSL参考代码如下:

pIn:

    _dEntity  Entity2D

    _picked  Entity2D

///

// 功能:二维帧捕获

// 输入:鼠标二维帧

// 输出:如果成功捕获,输出到的二维帧,否则为空

///

static Vector2D vTL2dF;
static Vector2D vSize2dF;

main()

{

    if(_dEntity == NULL)
    {
        _picked = NULL;
        return;
    }

    RenderContext rc = bc.GetPlayerRenderContext();
    rc.GetViewRect(viewRect);
    rc.GetWindowRect(renderRect);
    Vector2D subVect = renderRect.GetTopLeft() + viewRect.GetTopLeft();

    _dEntity.GetPosition(vTL2dF);
    _dEntity.GetSize(vSize2dF);
    
    vTL2dF += (vSize2dF/2);
    _picked = rc.Pick2D(vTL2dF + subVect);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值