Changeset 7988 for code/branches/usability/src/orxonox
- Timestamp:
- Feb 27, 2011, 12:48:50 PM (14 years ago)
- Location:
- code/branches/usability/src/orxonox/graphics
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/usability/src/orxonox/graphics/Camera.cc
r7966 r7988 69 69 this->bHasFocus_ = false; 70 70 this->bDrag_ = false; 71 this->nearClipDistance_ = 1;72 71 this->lastDtLagged_ = false; 73 72 … … 75 74 76 75 this->setConfigValues(); 76 77 this->configvaluecallback_changedFovAndAspectRatio(); 77 78 this->configvaluecallback_changedNearClipDistance(); 78 79 } … … 97 98 void Camera::setConfigValues() 98 99 { 99 SetConfigValue(nearClipDistance_, 1.0f).callback(this, &Camera::configvaluecallback_changedNearClipDistance); 100 SetConfigValue(fov_, 80.0f) 101 .description("Horizontal field of view in degrees") 102 .callback(this, &Camera::configvaluecallback_changedFovAndAspectRatio); 103 SetConfigValue(aspectRatio_, 1.0f) 104 .description("Aspect ratio of pixels (width / height)") 105 .callback(this, &Camera::configvaluecallback_changedFovAndAspectRatio); 106 SetConfigValue(nearClipDistance_, 1.0f) 107 .description("Distance from the camera where close objects will be clipped") 108 .callback(this, &Camera::configvaluecallback_changedNearClipDistance); 109 } 110 111 /** 112 @brief Update FOV and the aspect ratio of the camera after the config values or the window's size have changed. 113 */ 114 void Camera::configvaluecallback_changedFovAndAspectRatio() 115 { 116 // the aspect ratio of the window (width / height) has to be multiplied with the pixels aspect ratio (this->aspectRatio_) 117 float aspectRatio = this->aspectRatio_ * this->getWindowWidth() / this->getWindowHeight(); 118 this->camera_->setAspectRatio(aspectRatio); 119 120 // Since we use horizontal FOV, we have to calculate FOVy by dividing by the aspect ratio and using some tangents 121 Radian fovy(2 * atan(tan(Degree(this->fov_).valueRadians() / 2) / aspectRatio)); 122 this->camera_->setFOVy(fovy); 100 123 } 101 124 … … 103 126 { 104 127 this->camera_->setNearClipDistance(this->nearClipDistance_); 128 } 129 130 /** 131 @brief Inherited from WindowEventListener. 132 */ 133 void Camera::windowResized(unsigned int newWidth, unsigned int newHeight) 134 { 135 this->configvaluecallback_changedFovAndAspectRatio(); 105 136 } 106 137 -
code/branches/usability/src/orxonox/graphics/Camera.h
r6417 r7988 33 33 34 34 #include "util/OgreForwardRefs.h" 35 #include "core/WindowEventListener.h" 35 36 #include "tools/interfaces/Tickable.h" 36 37 #include "tools/interfaces/TimeFactorListener.h" … … 39 40 namespace orxonox 40 41 { 41 class _OrxonoxExport Camera : public StaticEntity, public Tickable, public TimeFactorListener 42 class _OrxonoxExport Camera : public StaticEntity, public Tickable, public TimeFactorListener, public WindowEventListener 42 43 { 43 44 friend class CameraManager; … … 66 67 void removeFocus(); 67 68 void setFocus(); 69 70 void configvaluecallback_changedFovAndAspectRatio(); 68 71 void configvaluecallback_changedNearClipDistance(); 72 73 void windowResized(unsigned int newWidth, unsigned int newHeight); 69 74 70 75 Ogre::Camera* camera_; … … 74 79 bool bDrag_; 75 80 bool lastDtLagged_; 81 float fov_; 82 float aspectRatio_; 76 83 }; 77 84 }
Note: See TracChangeset
for help on using the changeset viewer.