If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
In this code I'm assuming you want to work with a flat-XZ rotation. You can also do this with a flat-YZ or a flat-XY rotation, but then you will need to use quaternion.getPitch() or quaternion.getRoll().
Also be careful because I think it will not return a value between 90 & -90 but 0 & 180, so then you will need the edit the part where I check for the camera direction.
// Get CamDirection and cancel out Y-Axis and Magnitude Vector3 vCamDirection = mCamera->getDerivedOrientation() * Vector3::NEGATIVE_UNIT_Z; vCamDirection.y = 0; vCamDirection.normalise(); // Get rotations to X-Axis & Z-Axis Quaternion qRotationToXAxis = vCamDirection.getRotationTo( Vector3::UNIT_X ); Quaternion qRotationToZAxis = vCamDirection.getRotationTo( Vector3::UNIT_Z ); // Get the degrees from both rotations Real rRotationToXAxis = qRotationToXAxis.getYaw().valueDegrees(); Real rRotationToZAxis = qRotationToZAxis.getYaw().valueDegrees(); Real rRotation = 0; // Check which direction the camera is looking // And adjust rRotation if needed if( rRotationToXAxis >= 0 ) { rRotation = rRotationToZAxis; } else { if( rRotationToZAxis >= 0 ) { rRotation = rRotationToZAxis - rRotationToXAxis * 2; } else { rRotation = rRotationToZAxis + rRotationToXAxis * 2; } } // Rotate Texture TextureUnitState *texture = eCamView->getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0); texture->setTextureRotate( Degree( -rRotation ) );
In this part:
... if( rRotationToXAxis >= 0 ) { rRotation = rRotationToZAxis; } else { if( rRotationToZAxis >= 0 ) { rRotation = rRotationToZAxis - rRotationToXAxis * 2; } else { rRotation = rRotationToZAxis + rRotationToXAxis * 2; } } ...
I'm figuring out if the camera is looking along the Z-Axis (in positive direction) and if so I just use the rotation to the Z-Axis, but when the camera is looking the other way you will have to add or subtract the rotation from the X-Axis to be able to rotate 180 degrees. Whether to add or to subtract depends if you are looking in a positive direction along side the X-Axis or not.
When the camera is pointing in the negative direction of the Z-Axis, rRotationFromZAxis will still give you a value between 90 & -90. Now to compensate for that, you just multiply rRotationsFromXAxis by 2.
Original Author: Joost Passon, Release Date: January 5th, 2006
Contributors to this page: jacmoe
and
OgreWikiBot
.
Page last modified on Saturday 02 of January, 2010 05:40:35 GMT by jacmoe
.
The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.

