Panda3D中会随窗口大小改变而改变宽高比的Camera实现方式(如何创建一个默认base.cam那样的Camera)

panda3d使用base.makeCamera(base.win)创建的Camera并不会随着窗体大小的改变而改变宽高比……于是到底怎样实现这样的Camera呢?
[省略一万字的口胡]
于是……这样就可以了……
在Showbase或者某个自定义的DirectObject中

from panda3d.core import Camera, Lens

创建相机时

self.cam1 = base.makeCamera(base.win)            #生成Camera
self.lens = PerspectiveLens()                    #普通的透视镜头
self.lens.setMinFov(50.534016)                   #设置短边的Field of View这时候如果宽高比是16:9的话长边搞好是80度,大地喜欢。
                                                 #因为有些时候窗体会被拉成高比宽要大的情况所以这里应该设置MinFov而不是默认的宽的FOV
self.lens.setAspectRatio(base.getAspectRatio())  #根据画面设置宽高比


#...其它的一些设置

self.accept('window-event', self._adjustAspectRatio)  #然后,要响应窗体大小改变的事件创建Panda3D的任务(说明文档里没有这个事件啊!好不容易才在panda3d的论坛里发现的说……)

#....嘛

用于响应事件的方法

def _adjustAspectRatio(self,arg):
    if self.camera:
        self.lens.setAspectRatio(base.getAspectRatio())  #动态改变宽高比

于是这样自定义camera就成功模仿了默认camera的窗体大小改变而不失真的效果了!XD

今天做Gal模式场景的管理 本来只想就像标准Gal一样做个2D场景与立绘的
然后一时兴起在透视Camera实现了……(嗯同时解决了上面的问题)嗯 于是就变成了表面是2D其实是3D(这不蛋疼吗!)
嘛,既然Panda3D是3D引擎那当然要有除了脑补中的3D战斗外更多地利用它的优点的地方
于是它变成了很容易混合2D和3D的界面的奇怪的东西了……
撒花!

tttt

嘛,另外不要问窝为什么在坑引擎……(望天,不如说第二阶段终于开始了吧

啊啊啊啊啊啊啊啊啊忘了德叔的坑了!!!!!!!!!!!!!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *