Filed in: Resources.ProgrammingCodeSnippletsKeep-aspect-ratio · Modified on : Fri, 31 Jul 09
keeps the aspect ratio of the panda3d window the same, even on resizes.
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import *
def setResolution( resolution ):
wp = WindowProperties()
# set resolution
wp.setSize(resolution[0], resolution[1])
# set fullscreen
base.win.requestProperties(wp)
class windowHandlerClass( DirectObject ):
def __init__( self ):
self.active = True
DirectObject.__init__( self )
self.aspectRatio = [16., 9.]
base.win.setClearColorActive( True )
base.win.setClearColor(VBase4(1, 1, 1, 1))
self.cameras = [base.cam, base.cam2d, base.cam2dp]
if self.active:
self.accept( 'window-event', self.onResize)
def onResize( self, window=None ):
print "onResize"
if window is None:
window = base.win
wp = window.getProperties()
winx = float(wp.getXSize())
winy = float(wp.getYSize())
drx = winy/float(self.aspectRatio[1])*float(self.aspectRatio[0])/winx
dry = winx/float(self.aspectRatio[0])*float(self.aspectRatio[1])/winy
dx = (1.-drx) / 2
dy = (1.-dry) / 2.
dim = dx , (1.-dx), dy, (1.-dy)
reqx = round(winx*drx)
reqy = round(winy*dry)
reqx = winx
reqy = round( winx/float(self.aspectRatio[0])*float(self.aspectRatio[1]) )
if winx != reqx or winy != reqy:
print winx, winy, reqx, reqy, reqx/float(reqy)
setResolution( [reqx, reqy] )
if __name__ == '__main__':
from direct.directbase import DirectStart
windowHandler = windowHandlerClass()
run()