render same axis

本文详细阐述了如何通过调整当前渲染相机的参数,包括视场角、近裁剪距离等,来优化视图空间内的物体显示效果。通过计算投影参考长度并根据相机位置调整视图坐标,确保特定元素在屏幕上的正确呈现。实现过程涉及矩阵运算和几何公式应用,旨在提升视觉体验和场景交互性。

// 当前渲染相机的参数
    QGlobalCamera* curRenderCamera = _getWorld()->getMainCam();
    const Matrix4& matView = curRenderCamera->_getCamMatView();
    float zNear = curRenderCamera->getNearClipDistance();
    float fovYHalf = curRenderCamera->getFOVy().valueRadians() * 0.5f;
    float tanFov = Math::Tan(fovYHalf);
    float asp = curRenderCamera->getAspectRatio();
    float heightNear = tanFov * zNear * 2;
    float widthNear = asp * heightNear;
    float screenMaxSize = std::max( widthNear, heightNear );

    // 自己的参数
    Vector3 rsPos = _getRSPosWorld();
    Vector3 posInViewSpace = matView * rsPos;
    float zView = -posInViewSpace.z;

    // 调节
    const float projRef = 0.1f * screenMaxSize; // 要求占屏幕大小比例

    float zViewMin = zNear + 0.01f;
    if ( zView < zViewMin )
        zView = zViewMin;

    float projRefLong = Math::Sqrt( zNear * zNear + projRef * projRef );

    // ref / ref_l = r / z_view
    float r = projRef / projRefLong * zView;
    float s_adj = r / AXIS_LEN;
    Vector3 v_adj(s_adj);

转载于:https://www.cnblogs.com/zengqh/p/3534908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值