博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于模型与视口相切与视图最大化的方法
阅读量:4342 次
发布时间:2019-06-07

本文共 1417 字,大约阅读时间需要 4 分钟。

上周在群里问了一下MAX里关于视口与模型相切的方法,感谢 .昕 给了答案.

fn focusoutline obj=(    if obj!=undefined do    (        max zoomext sel all        viewPt=(Inverse(getViewTM())).row4;targPt=obj.center        c=Freecamera pos:viewpt        c.type=#target;c.target.pos=targpt        c.orthoProjection =true        bb= nodeGetBoundingBox obj c.transform        size = bb[2]-bb[1]        newpos=(((bb[1]+bb[2])/2)*c.objecttransform)        angle_w=2*atan((size[1]/2)/(distance viewpt targpt))        angle_l=2*atan((size[2]/2*(renderWidth*1.0)/renderHeight)/(distance viewpt targpt))        ra=(if angle_w>angle_l then angle_w else angle_l)        c.fov=ra        c.type=#free        move c (newpos-targpt)        c.type=#target        c.target.pos=newpos    ))focusoutline $

可是这个方法不可以在透视图视角下实现.

又查阅了一下帮助文档.找到了用来模拟试图最大化的方法(相当于按快捷键Z的效果).

虽然这个方法做不到最大边相切,但是已经能解决问题了.

fn ZE_Cam cam objs =(    local max2, fov, asp, v    fn maxof vals = (local v=vals[1];for v1 in vals do (if v1 > v do v=v1);v)    fov=0    asp=(renderWidth as float)/renderHeight    in coordsys cam    (        for obj in objs where obj != cam do        (            if obj.min.z >=0 do continue            v = maxof #((abs obj.max.x),(abs obj.min.x),(abs (obj.max.y*asp)),(abs (obj.min.y*asp)))            fov = maxof #(fov,(2*atan(-v/obj.min.z)))        )    )    cam.fov=fov)cam=$camera01ZE_Cam cam $*

而且最重要的是得到的是透视图,有时间再看看两个可以整合起来不.

转载于:https://www.cnblogs.com/3dxy/p/4519851.html

你可能感兴趣的文章
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>