kikosmalltalk
06-03-2008 19:08:49
Hi everyone
How ago the operation * between a quaternion and a vector3?
Apologize if it is not the suitable forum, but there is not a forum of general discucion
best regard kiko
bharling
07-03-2008 09:55:28
kikosmalltalk
08-03-2008 13:52:58
Hi
Thank you for reply.
It is the same as to make this:
geXForm3dRotate: pM by: pV into: pResult
" Result is Matrix M * Vector V: V Rotated by M (no translation). "
<api: geXForm3d_Rotate struct struct struct none>
^self invalidArgument
kiko
bharling
08-03-2008 23:26:05
Hmm...
Sorry I'm not sure what you mean. Can you explain a bit more? Is it a quaternion or a matrix multiplication you need to know about?
If your question is about Genesis3D then you'll need to ask at that forum instead of here, but I guess that you're a genesis3D user just starting with Ogre?
kikosmalltalk
09-03-2008 13:33:15
Hi
you wrote:
Sorry I'm not sure what you mean. Can you explain a bit more? Is it a quaternion or a matrix multiplication you need to know about?
A rotation matrix and a quaternion represent the same thing. Right ?
I want to have an equivalent one (Quaternion * Vector) with a (matrix * Vector).
At the moment I use Genesis3D and Smalltalk MT, but in the future I would be interested to use Ogre3D.
The only problem for this is that Ogre3D doesn't have a version as Genesis3D.
That is to say, Genesis3D is a classic DLL in C. Not C++.
The only way would be, to have a version of Ogre as Genesis3D or a scripting interface as has phyton.
The problem is that my knowledge of C/C++ are very basic as so that I can make this.
At this time I am trying to implement a code Ogre with Genesis3D.
I hope my preguta is not bothersome for the community of Ogre
(matrix * vector = vector rotated by the matrix) = (quaternion * vector = vector rotated by the quaternion). Right ?
kiko
bharling
13-03-2008 21:48:15
No not bothersome at all, we try to help if we can
Trouble is, I dont really know much about matrices, I can just about deal with quaternions but matrices are a bit beyond me i'm afraid.
I think you're right though, a quaternion and rotation matrix do basically the same thing. Heres a bit of code I nicked from nullsquared ( who may well be a child genius - check out his stuff in the showcase forum .. )
Ogre::Quaternion makeQuat(
const Ogre::Vector3 &forward, const Ogre::Vector3 &wantedUp = Ogre::Vector3::UNIT_Y) {
// if you don't understand this, don't worry
// just basically makes a full orientation based
// on a desired "up" vector and a desired "forward" vector
Ogre::Vector3 right = wantedUp.crossProduct(forward).normalisedCopy();
Ogre::Vector3 up = forward.crossProduct(right).normalisedCopy();
return Ogre::Quaternion(right, up, forward);
}
the python version of this would be:
def makeQuat( wantedForward, wantedUp):
right = wantedUp.crossProduct( wantedForward ).normalisedCopy()
up = wantedForward.crossProduct( right ).normalisedCopy()
return ogre.Quaternion( right, up, forward )
you'd then use this quaternion to rotate your original vector to face the new direction, by doing newQuaternion * originalVector
kikosmalltalk
25-03-2008 16:39:54
Hi
Thank you.
I will ask again if I have some other question.
KIKO