#!/usr/bin/python\r
# coding: utf-8\r
\r
+import math\r
from OpenGL.GL import *\r
from OpenGL.GLU import *\r
\r
from . import baseview\r
\r
class RokuroView(baseview.BaseView):\r
- def __init__(self, distance):\r
+ def __init__(self):\r
super(RokuroView, self).__init__()\r
self.w=1\r
self.h=1\r
self.head=0\r
self.pitch=0\r
- self.distance=distance\r
+ self.SHIFT_FACTOR=0.001\r
+ self.distance=100\r
self.shiftX=0\r
self.shiftY=0\r
self.aspect=1\r
self.n=1\r
self.f=10000\r
\r
+ def __str__(self):\r
+ return '<RokuroView shiftX: %f, shiftY: %f, distance: %f>' % (\r
+ self.shiftX, self.shiftY, self.distance)\r
+ \r
def onResize(self, w=None, h=None):\r
super(RokuroView, self).onResize(w, h)\r
self.aspect=float(self.w)/float(self.h)\r
self.distance*=0.9\r
\r
def shift(self, dx, dy):\r
- self.shiftX+=dx\r
- self.shiftY+=dy\r
+ self.shiftX+=dx * self.distance * self.SHIFT_FACTOR\r
+ self.shiftY+=dy * self.distance * self.SHIFT_FACTOR\r
\r
def rotate(self, head, pitch):\r
self.head+=head\r
self.dolly(d)\r
return True\r
\r
+ def look_bb(self, min_v, max_v):\r
+ w=max_v[0]-min_v[0]\r
+ h=max_v[1]-min_v[1]\r
+ long_side=max(w, h)\r
+ def deglee_to_radian(deglee):\r
+ return math.pi*deglee/180.0\r
+ d=long_side/math.tan(deglee_to_radian(30)) * 1.5\r
+ self.distance=min_v[2]+d\r
+ cx=min_v[0]+max_v[0]\r
+ cy=min_v[1]+max_v[1]\r
+ self.shiftX=-cx/2.0\r
+ self.shiftY=-cy/2.0\r
+ print(self)\r
+\r