Mercurial > hg > Members > e075743
view src/GlobalEyePoint.cpp @ 10:5727d511a13a
add src in Martial Project Xcode.
author | tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp |
---|---|
date | Wed, 03 Feb 2010 03:39:04 +0900 |
parents | |
children |
line wrap: on
line source
/* * GlobalEyePoint.cpp * Martial * * Created by ryoma on 10/01/28. * Copyright 2010 琉球大学. All rights reserved. * */ #include "GlobalEyePoint.h" GlobalEyePoint::GlobalEyePoint(char* name) : EyePoint(name) { Tman = new osgGA::TrackballManipulator(); offset = osg::Vec3(0,10,-2); direction = osg::Vec3(0, 0, 90); } void GlobalEyePoint::setTarget(MovableObject* _target) { targets.push_back(_target); } void GlobalEyePoint::frame() { osg::Matrixd myCameraMatrix; osg::Matrixd cameraRotation; osg::Matrixd cameraTrans; osg::Matrixd centerTrans; std::list<MovableObject*>::iterator iter; osg::Vec3 center = osg::Vec3(0,0,0), tmp; float minX, maxX, minY, maxY, minZ, maxZ, length; for (iter = targets.begin(); iter != targets.end(); ++iter) { tmp = (*iter)->getPos(); if (tmp.x() < minX) { minX = tmp.x(); } else if (tmp.x() > maxX) { maxX = tmp.x(); } if (tmp.x() < minY) { minY = tmp.y(); } else if (tmp.y() > maxY) { maxY = tmp.y(); } if (tmp.z() < minZ) { minZ = tmp.z(); } else if (tmp.z() > maxZ) { minZ = tmp.z(); } center += tmp; } length = (osg::Vec3(maxX+minX, maxY+minY, maxZ+minZ).length()) * Martial::CONFIG::WINDOW_WIDTH / 500; if (length < 10.0) length = 10.0; center /= (float)targets.size(); position = osg::Vec3(center.x(), length, center.z())+offset; cameraRotation.makeRotate(direction.z(), osg::Vec3(0,0,1)); myCameraMatrix.makeLookAt(position, center, osg::Vec3(0,0,1) * cameraRotation); Tman->setByInverseMatrix(myCameraMatrix); }