首页 > 其他 > 详细

render same axis

时间:2014-01-27 18:28:13      阅读:334      评论:0      收藏:0      [点我收藏+]

// 当前渲染相机的参数
    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);

render same axis

原文:http://www.cnblogs.com/zengqh/p/3534908.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!